从axios发送带有“ Content-Type”的发布请求:“ application / x-www-form-urlencoded”会给出401未经授权的响应

时间:2019-03-19 13:02:22

标签: node.js axios

我正在向服务器发送POST请求,以通过带有Content-Type的{​​{1}}头的axios获取令牌。我尝试过与邮递员相同,并且效果很好。我在请求正文中发送了一个Grant_type和client_credentials键值对。

这是我的axios请求:

x-www-form-urlencoded

数据对象由client_credentials组成。相同的凭据在邮递员中给出了成功的响应。

1 个答案:

答案 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进行处理感到很恼火,但是很好。)