【发布时间】:2017-12-28 00:35:57
【问题描述】:
我正在尝试使用以下代码调用 shiftplanning API:
import requests
url= "https://humanity.com/api/"
payload = {"key": "keyvalue", "request": { "module": "staff.login", "method": "GET","username": "myusername", "password": "mypassword"}}"
headers = {
'content-type': "application/x-www-form-urlencoded",
'cache-control': "no-cache",
}
r = requests.post(url, data = payload
, headers= headers)
r.text
我事先使用 Postman 测试了 api,它运行良好。但是,Postman 代码创建器中的有效负载如下所示:
payload = "data={\r\n \"key\": \"keyvalue\",\r\n \"request\": {\r\n \"module\": \"staff.login\",\r\n \"method\": \"GET\",\r\n \"username\": \"myusername\",\r\n \"password\": \mypassword\"\r\n }\r\n}"
我假设,payload 变量实际上需要格式化为字符串,正如 shiftplanning api 上的文档所说:
请记住,传递给 API 的任何数据都将被格式化为 JSON,并且其字符串值需要通过 POST HTTP 请求方法全部作为 post 变量“数据”发送(查看下面示例中的第 9 行) .还需要将 Content-Type 设置为 application/x-www-form-urlencoded。
但是,无论我做什么,我总是得到 api 的 html 作为返回,而不是对我的 http 请求的 json 响应。 使用
r.json()
由于返回的 html,除了引发错误之外,什么都不做。 我也尝试过使用
json = payload
在发布请求中,这也没有改变任何东西。`
感谢任何帮助和解释。我真的很想了解我做错了什么,因为它似乎很容易执行。
【问题讨论】:
-
如果您获得 HTML,则将其保存在文件中并在 Web 浏览器中打开以查看您获得的内容。也许有有用的信息。
-
感谢您的回复。 Python SDK 包含 auf python 2.x 代码,我正在尝试使用 3.x。他们还使用 urllib 而不是请求。无论如何,我没有从使用 sdks 中学到很多东西,所以我想自己编写代码。该 html 仅包含您在浏览器中打开 human.com/api 时将获得的常规内容。
-
使用像Charles这样的本地代理服务器,您可以看到SDK和您的代码使用的所有标头、cookie、正文等,因此您可以比较两者,这样您就可以了解您的代码有什么问题.
标签: python post python-requests