Django下使用requests发带Token的POST请求返回无Token提示如何解决
问题根因
- 请求参数格式与声明的Content-Type不匹配:headers中明确指定了
Content-Type: application/json,但调用requests.post时使用data参数传参,该参数会将字典序列化为application/x-www-form-urlencoded格式的表单数据,和声明的JSON格式不符,服务器解析请求失败,进而无法正确读取Header中的Token字段。 - 硬编码Content-Length导致请求解析异常:手动指定了固定的
Content-Length: "286",requests会自动根据实际请求体长度计算该值,硬写的固定值和实际请求体长度不一致时,服务器会按照错误长度截断请求,导致Header或Body内容解析失败,无法识别到Token。 - Token字段规则不符合接口要求:部分接口要求认证字段的键名为
Authorization而非Token,或者需要携带指定前缀(如Bearer 你的Token值),字段名或格式不匹配时服务器会判定未传入Token。 - Token本身无效:使用的Token可能已过期、生成规则错误、或和接口要求的权限范围不匹配。
排查解决步骤
- 修正请求传参方式:将
requests.post(url, headers=headers, data=data)修改为requests.post(url, headers=headers, json=data),json参数会自动将字典序列化为JSON格式,同时自动生成正确的Content-Type头,无需手动声明。如果要使用data参数,需要提前自行序列化字典:data=json.dumps(data)。 - 删除headers中硬编码的
Content-Length、Content-Type字段,这两个字段requests会自动根据请求内容生成,手动写死极易出现不匹配问题。 - 打印请求头验证Token传输:发送请求前打印
headers确认Token值正确,收到响应后打印req.request.headers查看实际发出的请求头,确认Token字段确实被正常携带。 - 验证接口Token规则:使用接口调试工具(如Postman)先验证Token有效性,确认接口要求的认证字段名、是否需要前缀等规则,确保传入的Token格式符合要求。
- 打印完整请求响应内容辅助排查:打印
req.request.body查看实际发出的请求体内容,打印req.text查看完整响应报文,确认是否存在其他参数错误。
内容的提问来源于stack exchange,提问作者leauradmin
相关产品推荐
相关产品推荐

