node.js - Axios 和 Oauth1.0 - '状态:400,错误请求'
问题描述
我是 Nodejs 和所有与 Node 相关的模块的新手。我一直在尝试使用 axios 发送 Oauth1.0 Autorization 签名,但我得到: response: { status: 400, statusText: 'Bad Request', ...}
import { BASE_URL } from '../../../config/config.js';
import axios from 'axios';
import status from 'http-status';
import OAuth from 'oauth-1.0a';
import { createHmac } from 'crypto';
import dotenv from 'dotenv';
dotenv.config();
const CONSUMERKEY = process.env.consumer_key;
const CONSUMERSECRET = process.env.consumer_secret;
const TOKENKEY = process.env.access_token;
const TOKENSECRET = process.env.token_secret;
export const oauth = OAuth({
consumer: {
key: CONSUMERKEY,
secret: CONSUMERSECRET,
},
signature_method: 'HMAC-SHA1',
hash_function(base_string, key) {
return createHmac('sha1', key)
.update(base_string)
.digest('base64')
},
})
export const token = {
key: TOKENKEY,
secret: TOKENSECRET,
}
const doRequest = async (query) => {
const request_data = {
url: `${BASE_URL}`,
method: 'GET',
params: { q: `${query}` },
};
const authHeader = oauth.toHeader(oauth.authorize(request_data, token));
return await axios.get(request_data.url, request_data.params, { headers: authHeader });
};
const searchU = async (term) => {
return await doRequest(`${term}`);
};
export const userS = async (req, res, next) => {
try {
const { query } = req;
const { data } = await searchU(query.q);
const string = JSON.stringify(data);
const Rs = JSON.parse(string);
const response = {
code: 1,
message: 'sucess',
response: Rs
};
res.status(status.OK).send(response);
} catch (error) {
next(error);
if (error.response){
console.log("Response: ");
console.log(error.response);
} else if(error.request){
console.log("Request: ");
console.log(error.request)
} else if(error.message){
console.log("Message: ");
console.log(error.message)
}
}
};
我也一直在尝试在这篇文章中给出的解决方案:但我无法完成这项工作,不知道我会做错什么......
当我尝试以下代码(见下文)时,使用请求模块(已弃用)效果很好,但我真的需要用 Axios 来做......
const request_data = {
url: `${BASE_URL}`,
method: 'GET',
params: { q: `${query}` },
};
const authHeader = oauth.toHeader(oauth.authorize(request_data, token));
request(
{
url: request_data.url,
method: request_data.method,
form: request_data.params,
headers: authHeader,
},
function(error, response, body) {
console.log(JSON.parse(body));
}
)
关于我在这方面做错了什么有什么想法吗?非常感谢你!!
解决方案
有关 Axios 的请求配置,请参阅以下链接。我相信您需要在 axios.get() 的标头之后添加查询参数
试试下面的,看看它是怎么回事: -
return await axios.get(request_data.url, { headers: authHeader }, request_data.params);
推荐阅读
- networking - CONTIKI -- 使用 AP 和移动节点的 COOJA WiFi 模拟
- jquery - 无法将数据放在控制器 laravel 返回的 ajax 成功函数的输入值上
- python - 如何访问我编写的 django 库
- android - 如何在 textview 中显示来自 json 的特定条目?
- android - 使用 style.xml 在 Clicked 和 unClicked 状态下更改 TextView 颜色
- git - 更改以前的提交消息,同时保持它们已注销
- powershell - 在工作表中,如果在 A5 单元格中找到一个单词,则要使用 PowerShell 复制 B5 单元格值
- php - 在foreach中单击按钮时从输入中获取值
- angular6 - 如何在 Angular 6 中更改拦截器中的内容类型?
- reactjs - 如何将浮动标签添加到反应选择?