Python requests调用API报simplejson.errors.JSONDecodeError错误怎么解决
报错根因
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 错误说明接口返回的响应内容不是合法JSON格式,要么响应体为空,要么返回的是HTML错误页、纯文本报错信息,通常伴随非2xx的HTTP状态码。
常见触发原因与解决方法
原因1:Authorization请求头格式错误
大部分JWT鉴权的接口要求Authorization头的前缀为Bearer,你当前代码写的是token前缀,格式不匹配会触发401未授权错误,接口返回非JSON的报错内容。
解决:将请求头里的Authorization值修改为Bearer 你的令牌,格式参考:header = {"Authorization":'Bearer {}'.format('你的令牌字符串')}原因2:多余的Content-Type请求头导致请求被拦截
GET请求不需要传递请求体,你添加的Content-Type: application/json头没有实际作用,部分严格校验的接口会直接拒绝这类不符合规范的请求。
解决:删除该请求头即可。原因3:日期参数格式不一致触发参数校验失败
你代码里的两个查询参数格式不统一:from_date用的是带T的ISO标准时间格式,to_date用的是空格分隔的时间格式,接口参数校验失败会返回400错误,响应内容不是JSON。
解决:统一两个时间参数的格式,都调整为ISO格式:data = {"from_date":"2021-06-15T07:19:32", "to_date":"2021-09-16T00:01:09"}原因4:未做状态码校验直接解析JSON
建议先打印响应状态码和原始响应内容,定位具体错误后再处理:import requests url = "https://xxxxxxxxxxxxxx/purchases" header = {"Authorization":'Bearer {}'.format('eyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')} data = {"from_date":"2021-06-15T07:19:32", "to_date":"2021-09-16T00:01:09"} response = requests.get(url, params=data, headers=header) # 先排查实际返回内容 print("响应状态码:", response.status_code) print("响应原始内容:", response.text) # 状态码正常再解析JSON if response.status_code == 200: print(response.json())
内容的提问来源于stack exchange,提问作者Gopakumar N G
相关产品推荐
相关产品推荐

