使用 Axios Node.js 请求 oAuth2 令牌 - 使用 'request' 有效,但不适用于 Axios
Using Axios Node.js to request an oAuth2 token - works using 'request' but not with Axios
以下代码工作正常:
request({
url: 'https://xxxxxxx/oauth/token',
method: 'POST',
auth: {
user: 'clientId',
pass: 'clientSecret'
},
form: {
'grant_type': 'client_credentials'
}
}, function(err, res) {
var json = JSON.parse(res.body);
console.log("Access Token:", json.access_token);
});
但是,当我尝试使用 Axios 复制它时(因为请求现在已弃用),我不断收到 401
axios.request({
url: 'https://xxxxxxx/oauth/token',
method: 'POST',
auth: {
username: 'clientId',
password: 'clientSecret',
},
headers: {
Accept: 'application/json','Content-Type':'application/x-www-form-urlencoded',
},
data: {
grant_type: 'client_credentials',
},
}).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log("error = " + err);
});
即catch 拾取错误响应 401
关于如何将成功的 'request' 编码为 axios 的任何想法??
默认情况下 axios
以 JSON 格式发送数据。要发送表单数据,您需要使用 URLSearchParams
或 qs.stringify
.
上面建议的解决方案解决了问题。解决方案如下:
const qs = require('querystring');
const data = { 'grant_type': 'client_credentials'};
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
auth:{
username: 'clientId',
password: 'clientSecret',
},
data: qs.stringify(data),
url: 'https://xxxxxxxxx/oauth/token',
}
axios.request(options).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log("error = " + err);
});
以下代码工作正常:
request({
url: 'https://xxxxxxx/oauth/token',
method: 'POST',
auth: {
user: 'clientId',
pass: 'clientSecret'
},
form: {
'grant_type': 'client_credentials'
}
}, function(err, res) {
var json = JSON.parse(res.body);
console.log("Access Token:", json.access_token);
});
但是,当我尝试使用 Axios 复制它时(因为请求现在已弃用),我不断收到 401
axios.request({
url: 'https://xxxxxxx/oauth/token',
method: 'POST',
auth: {
username: 'clientId',
password: 'clientSecret',
},
headers: {
Accept: 'application/json','Content-Type':'application/x-www-form-urlencoded',
},
data: {
grant_type: 'client_credentials',
},
}).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log("error = " + err);
});
即catch 拾取错误响应 401
关于如何将成功的 'request' 编码为 axios 的任何想法??
默认情况下 axios
以 JSON 格式发送数据。要发送表单数据,您需要使用 URLSearchParams
或 qs.stringify
.
上面建议的解决方案解决了问题。解决方案如下:
const qs = require('querystring');
const data = { 'grant_type': 'client_credentials'};
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
auth:{
username: 'clientId',
password: 'clientSecret',
},
data: qs.stringify(data),
url: 'https://xxxxxxxxx/oauth/token',
}
axios.request(options).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log("error = " + err);
});