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

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

提问人:John 提问时间:12/17/2020 更新时间:12/17/2020 访问量:120

问:

我正在尝试将本地 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中做一个请求吗?

python curl 发布 python 请求 w3c 验证

评论


答:

0赞 SergiyKolesnikov 12/17/2020 #1

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

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)