Python可正常调用的POST请求用JS实现返回400错误该如何解决?
错误原因
- 数据格式不匹配:Python中调用
requests.post时传入data参数,会默认将字典 payload 序列化为application/x-www-form-urlencoded格式的表单数据,你的后端接口适配的是该格式。而JS代码中直接将payload序列化为JSON字符串,发送的是JSON格式数据,和后端预期的解析规则不匹配,因此返回400错误。 - 缺少对应Content-Type头:fetch请求发送非表单的自定义格式数据时,需要显式在请求头中声明
Content-Type,否则后端无法正确识别请求体的编码格式。
解决方案
有两种可选择的修复方案,优先选择第一种完全对齐原Python请求逻辑:
方案1:发送表单格式数据(和原Python逻辑完全一致)
使用URLSearchParams将payload转为表单格式,代码如下:
const payload = { "content": "this is text", }; fetch("https://website.com/api/e1", { method: "POST", headers: { "authorization": "abcd1234" }, body: new URLSearchParams(payload) });
URLSearchParams会自动携带正确的Content-Type: application/x-www-form-urlencoded请求头,不需要手动额外声明。
方案2:发送JSON格式数据(需后端支持JSON解析)
如果确认后端接口支持接收JSON格式的请求体,只需补充声明JSON对应的Content-Type头即可:
const payload = { "content": "this is text", }; fetch("https://website.com/api/e1", { method: "POST", headers: { "authorization": "abcd1234", "Content-Type": "application/json" }, body: JSON.stringify(payload) });
内容的提问来源于stack exchange,提问作者lendo
相关产品推荐
相关产品推荐

