如何通过 post 请求在 python 中发送文件,类似于 curl? (W3C 验证器)

How to send files via post request in python similar to curl? (W3C validator)

我正在尝试将本地 html 文件从我的计算机发送到 W3C 的 https://validator.nu/ 以验证它。 我发现这个 curl 命令在终端中运行得很好:

curl -H "Content-Type: text/html; charset=utf-8" \
    --data-binary @FILE.html \
    https://validator.w3.org/nu/?out=gnu

但是如何在 python 中执行与提到的 curl 命令等效的 post 请求?

我已经尝试过以下方法,但没有正常工作。

headers = {
    'Content-Type': 'text/html',
    'charset': 'utf-8',
}
url = "https://validator.w3.org/nu/?out=gnu"
files = {'upload_file': open('filename.html','rb')}
r = requests.post(url, files=files, data=data, headers=headers)
print(r.text)

有人可以帮我在 python 中提出请求吗?

您需要将文件内容作为二进制数据发送:

import requests

headers = {
    'Content-Type': 'text/html',
    'charset': 'utf-8',
}
url = "https://validator.w3.org/nu/?out=gnu"
with open("filename.html", "rb") as f:
    data = f.read()
r = requests.post(url, data=data, headers=headers)
print(r.text)