当同一个 POST 在 Postman 中正常工作时,如何解决 Python 请求 POST 失败的问题?

use*_*332 2 python python-3.x python-requests

当发出在 Postman 中工作正常的 POST 请求时,我继续从 python 请求中收到非常通用、无用的错误消息。

无论我尝试什么,我都会继续收到两条错误消息之一。请注意,调用的 python 脚本没有155 行,有效负载也不包含字母“u”:

{"error":{"detail":"SyntaxError: Unexpected token: u (sys_script_include.d2426c9ec0a8016501958bf2ac79c775.script; line 155)","message":"Unexpected token: u"},"status":"failure"}

{"error":{"message":"Unexpected token: u","detail":"SyntaxError: Unexpected token: u (sys_script_include.d2426c9ec0a8016501958bf2ac79c775.script; line 155)"},"status":"failure"}
Run Code Online (Sandbox Code Playgroud)

Postman中,参数会被正确解释,然后附加到 url 中,例如:

https://areallylongurl?params={"catalogItem": "Req Name"}
Run Code Online (Sandbox Code Playgroud)

Python请求中,我尝试了各种组合,但没有运气。

payload = {"params": '{"catalogItem": "Req Name"}'}
response = requests.post(url, headers=headers, json=payload, verify=False)
response = requests.post(url, headers=headers, json=json.dumps(payload), verify=False)
response = requests.post(url, headers=headers, data=payload, verify=False)
response = requests.post(url, headers=headers, data=json.dumps(payload), verify=False)
Run Code Online (Sandbox Code Playgroud)

通过使用这个非常有用的 SO 答案,我能够进一步分析请求库如何解释我提供的有效负载,但我仍然不确定如何解释这个通用错误消息,或者原因可能是什么。

有谁知道根本问题可能是什么?请注意,我可以从此 API 获取数据,而不会出现请求问题,只有 POST 存在问题。

blh*_*ing 5

由于在 postman 中,参数像 一样“附加到 url” https://areallylongurl?params={"catalogItem": "Req Name"},这意味着该请求可能是一个 GET 请求,其中 JSON 作为值传递给参数params,而不是 POST 请求的有效负载,在这种情况下,您应该这样做反而:

response = requests.get(url, headers=headers, params={"params": json.dumps(payload)}, verify=False)
Run Code Online (Sandbox Code Playgroud)

  • 很高兴有帮助。您成功用于邮递员的 URL 告诉了人们为使请求正常工作而应该知道的一切。GET 请求的约定是将查询字符串以“<参数名称>=<值>”对的形式附加到 URL,并在问号“?”后用“&”分隔。因此,从 URL `https://areallylongurl?params={"catalogItem": "Req Name"}` 可以明显看出,服务器正在等待一个 GET 请求,该请求的参数名为 `'params'`,其值为 JSON - 格式,因此您应该使用“requests.get”和“params”参数相应地发出这样的请求。 (2认同)