requests解码失败:该错误源于目标站点还是脚本问题?
问题诊断:InvalidMessageException 成因分析
先给你拍板:这个错误大概率是脚本的请求格式不匹配导致的,不是目标站点的问题。
咱们拆解下问题:
你明确设置了请求头Content-Type: Application/json,相当于告诉服务器「我发的是JSON格式的数据哈」,但实际传参时用的是data=payload——这时候requests会默认把字典编码成表单格式(application/x-www-form-urlencoded),等于你嘴上说发JSON,实际递过去的是表单数据,服务器接收到后完全没法按JSON解析,直接就抛出了InvalidMessageException。
给你两个快速修复的方案:
- 方案一(推荐):直接用requests的
json参数传payload,它会自动帮你把字典转成JSON字符串,还会自动适配Content-Type(和你手动设置的也不冲突):
output = session.post(url, json=payload)
- 方案二:手动把字典转成JSON字符串再用
data传,记得导入json模块:
import json output = session.post(url, data=json.dumps(payload))
如果改完还是报类似错误,再去排查目标站点的问题(比如URL是否正确、有没有权限限制、参数字段是否符合要求),但目前来看90%以上的概率是请求格式不匹配的锅。
内容的提问来源于stack exchange,提问作者Ogden
相关产品推荐
相关产品推荐

