我应该发送这个:
curl --header "Content-Type: text/plain" --request POST --data "ON" example.com/rest/items/z12
相反,我发送的是:
import requests
headers = {"Content-Type": "text/plain"}
url = 'http://example.com/rest/items/z12'
_dict = {"ON": ""}
res = requests.post(url, auth=('demo', 'demo'), params=_dict, headers=headers)
我收到错误400(错误请求?)
我做错了什么?
答案 0 :(得分:3)
POST正文设置为ON
;使用data
参数:
import requests
headers = {"Content-Type": "text/plain"}
url = 'http://example.com/rest/items/z12'
res = requests.post(url, auth=('demo', 'demo'), data="ON", headers=headers)
params
参数用于URL查询参数,并使用字典,您要求requests
将其编码为表单编码;因此?ON=
已添加到网址中。
请参阅curl
manpage:
(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器所做的那样。
data - (可选)要在
Request
正文中发送的字典,字节或类文件对象。
答案 1 :(得分:2)
params
方法中的 requests.post
参数用于将GET参数添加到URL。所以你正在做这样的事情:
curl --header "Content-Type: text/plain" --request POST example.com/rest/items/z12?ON=
您应该使用data
参数。
import requests
headers = {"Content-Type": "text/plain"}
url = 'http://example.com/rest/items/z12'
res = requests.post(url, auth=('demo', 'demo'), data="ON", headers=headers)
此外,如果您给数据参数提供一个字典,它会将有效负载发送为“application / x-www-form-urlencoded”。在curl命令中,您将原始字符串作为有效负载发送。这就是我改变你的榜样的原因。