【问题标题】:REST API post request results in successful request but not creationREST API 发布请求导致请求成功但未创建
【发布时间】:2021-05-19 18:16:34
【问题描述】:

我一直在尝试向我的 CRM API 发出发布请求。 CRM API 非常模糊:

“当您希望创建记录时,可以使用 POST 请求。您将 JSON 编码的字符串 POST 到服务器,它将返回记录的单个实例。”

POST /{object_name}

示例: 请求网址(POST):

/accounts

请求正文 (JSON):

{
    "name": "testing API"
}

我经常成功地发出 GET 请求,但 POST 并不那么容易。

url = "https://apiv4.reallysimplesystems.com/accounts?<KEY>"

payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
headers = {
  'Content-Type': 'application/json',
  'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'
}

response = requests.post(url, headers=headers, data=payload)

当我运行这个时,我得到一个状态码 200,但我真的在寻找那个 201。我现在必须遵循的唯一线索是当我运行时:

response.json()

我得到错误:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我已经尝试将响应参数切换为 json:

response = requests.post(url, headers=headers, json=payload)

我尝试使用 json.dumps() 确保我的有效负载是 json:

payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
payload = json.dumps(payload)

而且我已经尝试了各种其他的恶作剧,我什至现在都想不起来了。有谁知道我在这里哪里出错了? 200 状态码让我感到痛苦的接近。

【问题讨论】:

  • 您可以先打印 response.content 来查看来自服务器的消息是什么。很可能它与您的有效负载的语法有关
  • 响应本质上提供了API页面的HTML Doc。这里是电子邮件和密码字段,所以我尝试使用 auth = HTTPBasicAuth(, ) 提供我的电子邮件和密码信息,但响应保持不变。

标签: python json api post python-requests


【解决方案1】:

&lt;AUTH_TOKEN&gt; 替换为您的身份验证令牌

url = "https://apiv4.reallysimplesystems.com/accounts/"

payload = {"name":"Ziggy"}
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <AUTH_TOKEN>',
}

response = requests.post(url, headers=headers, data=payload)

【讨论】:

  • 是的,我明白这一点。我的授权令牌已正确输入。我正在使用 来编辑我的安全信息。
【解决方案2】:

问题解决了:

import json
import requests

url = "https://apiv4.reallysimplesystems.com/accounts"

payload = {"name":"RSS Test Joe Bloggs","addresscounty/state":"Maryland","source":"Word of Mouth"}
payload = json.dumps(payload)
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <AUTH KEY>'
}

response = requests.post(url, headers=headers, data=payload)

而不是使用包含在 URL 中并使用的 Postman 代码:

'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'

我将其替换为标准授权标头。其次,我发现使用json.dumps(payload)json = payload 会导致错误请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2020-04-12
    相关资源
    最近更新 更多