gpt4 book ai didi

node.js - 使用 "Content-Type": "application/x-www-form-urlencoded" gives an 401 Unauthorized response 从 axios 发送 post 请求

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:41 24 4
gpt4 key购买 nike

我正在向服务器发送一个 POST 请求,以通过 axios 获取一个带有 x-www-form-urlencoded< 的 Content-Type header 的 token 。我对 postman 进行了同样的尝试,效果很好。我在请求正文中发送了一对键值对 grant_type 和 client_credentials。

这是我的 axios 请求:

axios.post(`${baseURI}/protocol/openid-connect/token`, data, {
headers : {
"Authorization" : "Basic " + token,
"Content-Type" : "application/x-www-form-urlencoded"
},
withCredentials: true
}).then(response => {
AUTH_TOKEN = response.data.access_token;
console.log(response.data);
}).catch(error => {
console.log(error.response);
})

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

最佳答案

在我最终发现 Axios 需要将数据对象重新格式化为查询字符串之前,我遇到了完全相同的问题。

所以自己做一个这样的函数:

function getQueryString(data = {}) {
return Object.entries(data)
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
.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 处理,但哦,好吧。)

关于node.js - 使用 "Content-Type": "application/x-www-form-urlencoded" gives an 401 Unauthorized response 从 axios 发送 post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55241728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com