Axios发送POST请求返回状态码400但Postman运行正常该如何解决?
问题原因
你配置了请求头Content-Type: application/x-www-form-urlencoded,但直接传入JavaScript对象作为请求体时,axios默认会将其序列化为JSON格式,和声明的请求头格式不匹配,服务端无法正确解析参数所以返回400错误。Postman会自动对x-www-form-urlencoded类型的参数做序列化处理,所以请求可以正常执行。
解决方法
- 方案1:使用浏览器原生
URLSearchParams序列化请求体(推荐,无需额外依赖)
修改请求体部分代码如下:
let body = new URLSearchParams({ client_id: 'val1', client_secret: 'val2', code: '12345', grant_type: 'authorization_code', redirect_uri: 'exp://127.0.0.1:19000' });
- 方案2:使用qs库序列化请求体(适配低版本浏览器场景)
先安装qs库:npm install qs,之后修改代码:
import qs from 'qs' // 发送请求部分代码 let body={ client_id: 'val1', client_secret: 'val2', code: '12345', grant_type: 'authorization_code', redirect_uri: 'exp://127.0.0.1:19000' }; let config = { headers:{ 'Content-Type': 'application/x-www-form-urlencoded', }, // 也可以把序列化逻辑放在transformRequest里全局生效 transformRequest: [data => qs.stringify(data)] }
验证方法
修改代码后重新发送请求,打开浏览器控制台的「网络」标签,查看对应请求的Payload,确认请求体是key1=val1&key2=val2格式的表单参数即可。
内容的提问来源于stack exchange,提问作者Santam
相关产品推荐
相关产品推荐

