【问题标题】:Python Post request with REQUESTS/ Shiftplanning API带有 REQUESTS/Shiftplanning API 的 Python Post 请求
【发布时间】: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


【解决方案1】:

如果您想要 json 响应,请将 headers 中的 content-type 更改为 application/json。 Postman 会自动为您设置该标头,但您需要在 Python 代码中进行设置。

【讨论】:

  • 感谢您的回复。但是,它不起作用。在 Postman 中,我专门启用了“内容类型 - 应用程序/x-www-form-urlencoded”,否则我没有收到 json 响应。如 API 文档中所述,“Content-Type 需要设置为 application/x-www-form-urlencoded。”
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2020-03-23
  • 2015-06-11
  • 2015-05-18
  • 2017-03-07
  • 1970-01-01
相关资源
最近更新 更多