将 python 个请求与 curl 进行比较

compare python requests with curl

我正在使用 requestsrequests_oauthlib 与 API 交互。

我成功验证并访问了 API 的所有 GET 方法,但使用 POST 方法时出现错误 500。例如:

r = oauth.post("https://api.timelyapp.com/1.0/1/clients", 
data={"client":{"name":"newclient", "color":"c697c0" }}, 
allow_redirects=False, headers={"Content-Type": "application/json"})

问题是我用 curl 测试了相同的调用并且它工作正常,这里是 curl 代码:

curl -v -X POST -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXX" --data '{"client": { "name": "newclient", "color":"c697c0" }}' "https://api.timelyapp.com/1.0/1/clients"

我如何才能更深入地挖掘 requests 以将其调用与 curl 进行比较?

更新:

另外,注意到如果我不指定内容类型:

r = oauth.post("https://api.timelyapp.com/1.0/1/clients", 
data={"client":{"name":"newclient", "color":"c697c0" }}, 
allow_redirects=True)

我得到的是重定向到网站主页的 302,我从中获取页面内容。在任何情况下都不会添加新客户端。

您可能想试试这个:

data=json.dumps(payload)

来自 python-requests doc:

There are many times that you want to send data that is not form-encoded. If you pass in a string instead of a dict, that data will be posted directly.