【发布时间】: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