Python使用Token调用API遇403、400错误问题求助
问题诊断与解决方案
首次403错误根因
- 未解析授权响应的实际令牌值:你直接将整个
auth_response响应对象传入授权头,而非提取其中的access_token字段 - 授权头前缀错误:OAuth2客户端凭证模式返回的令牌类型为
Bearer,你错误使用了token作为前缀,不符合接口鉴权规则
后续400日期格式错误根因
requests库发送GET请求时,会自动对params中的参数值做URL编码,默认会把日期中的空格编码为+,而该API的后端服务仅识别空格编码为%20的格式,或者要求使用ISO8601标准的T作为日期时间分隔符,因此判定格式非法。
修复方案
可以选择以下任意一种方案修复:
方案1:使用ISO8601标准日期格式(兼容性最好)
将日期中的空格替换为T,符合绝大多数API的日期解析规则:
dateparams = { "StartDateTime": "2021-01-01T00:00:00", "EndDateTime" : "2021-10-11T23:59:00" }
方案2:手动编码日期参数,强制空格编码为%20
如果接口要求必须保留空格的语义,可手动处理编码避免默认的+转换:
from urllib.parse import quote dateparams = { "StartDateTime": quote("2021-01-01 00:00:00", safe=''), "EndDateTime" : quote("2021-10-11 23:59:00", safe='') }
额外优化建议
请求令牌后增加状态码校验,避免令牌获取失败后仍继续调用业务接口,同时可以直接用requests内置的json()方法解析响应,不需要手动导入json模块处理:
auth_response = requests.post(auth_url, data=data) # 增加校验,令牌请求失败直接抛出异常 auth_response.raise_for_status() authdata = auth_response.json() token = authdata['access_token']
内容的提问来源于stack exchange,提问作者opperman.eric
相关产品推荐
相关产品推荐

