Python Requests调用API报400错误,http.client却可正常请求
问题:Postman可正常调用的私有API,使用Requests库返回400错误
我尝试调用一个私有API,请求内容已做模糊处理。该请求在Postman中能正常运行,但将Postman生成的代码复制到VS Code后无法工作:
import json import requests url = "https://myapi.com/v1/search" payload = json.dumps({ 'username': 'user', 'start_date' : '01/01/2023T16:06:40+00:00', 'end_date' : '01/02/2023T16:06:40+00:00' }) headers = { 'Authorization': 'Bearer XXXX', 'Content-Type': 'application/json' } response = requests.post(url, headers=headers, data=payload) response.raise_for_status() print(response.json())
错误信息:
response.raise_for_status() File "C:\Users\XXXX\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\models.py", line 1021, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: for url: https://myapi.com/v1/search
但使用http.client库发起请求却能成功:
import json import http.client conn = http.client.HTTPSConnection("myapi.com") payload = json.dumps({ 'username': 'user', 'start_date' : '01/01/2023T16:06:40+00:00', 'end_date' : '01/02/2023T16:06:40+00:00' }) headers = { 'Authorization': 'Bearer XXXX', 'Content-Type': 'application/json' } conn.request("POST", "/v1/search", payload, headers) res = conn.getresponse() data = res.read() print(res.getcode()) print(data.decode("utf-8"))
我已尝试以下方案,但问题依旧:
- 将payload传入request的json参数,即
requests.post(url, headers=headers, json=payload) - 在headers中添加
{"User-Agent": "PostmanRuntime/7.30.0"} - 在请求中加入
verify=False - 尝试使用requests.Session:
import json import requests s = requests.Session() url = "https://myapi.com/v1/search" s.headers = { 'Authorization': 'Bearer XXXX', 'Content-Type': 'application/json' } payload = json.dumps({ 'username': 'user', 'start_date' : '01/01/2023T16:06:40+00:00', 'end_date' : '01/02/2023T16:06:40+00:00' }) response = s.post(url, data=payload) response.raise_for_status() print(response.json())
Python版本:3.9.7
Requests版本:2.28.1
希望能得到解决思路!
内容的提问来源于stack exchange,提问作者cozzymotto
相关产品推荐
相关产品推荐

