我正在向服务器发送POST
请求,以通过带有Content-Type
的{{1}}头的axios获取令牌。我尝试过与邮递员相同,并且效果很好。我在请求正文中发送了一个Grant_type和client_credentials键值对。
这是我的axios请求:
x-www-form-urlencoded
数据对象由client_credentials组成。相同的凭据在邮递员中给出了成功的响应。
答案 0 :(得分:0)
我遇到了完全相同的问题,直到我最终确定Axios需要将数据对象重新格式化为查询字符串。
因此,使自己具有如下功能:
function getQueryString(data = {}) {
return Object.entries(data)
.map(dataEntry => `${encodeURIComponent(dataEntry.shift())}=${encodeURIComponent(dataEntry.shift())}`)
.join('&');
}
非常简单,只需URI即可对对象的所有部分进行编码,并使用&
将它们连接起来。
然后按如下所示修改您的代码:
axios.post(`${baseURI}/protocol/openid-connect/token`,data, {
headers : {
"Authorization" : "Basic " + token,
"Content-Type" : "application/x-www-form-urlencoded"
},
withCredentials: true,
transformRequest: getQueryString
})
.then(/*...*/);
您可以在以下位置了解请求配置的不同选项,包括transformRequest:https://github.com/axios/axios#request-config
(我仍然对这是必要的,而不是由Axios进行处理感到很恼火,但是很好。)