【问题标题】:Axios and Oauth1.0 - 'status: 400, Bad Request'Axios 和 Oauth1.0 - '状态:400,错误请求'
【发布时间】:2021-10-13 12:45:00
【问题描述】:

我是 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)
            
        }
        

    }
    
};

我也一直在尝试On this post: 给出的解决方案,但我无法完成这项工作,不知道我做错了什么......

当我尝试以下代码(见下文)时,使用 Request 模块(已弃用)效果很好,但我真的需要用 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));
  }
)

关于我在这方面做错了什么有什么想法吗?非常感谢!!

【问题讨论】:

    标签: node.js oauth axios request oauth-1.0a


    【解决方案1】:

    有关 Axios 的请求配置,请参阅以下链接。我相信您需要在 axios.get() 的标头之后有查询参数

    Axios Request Config

    试试下面的,看看效果如何:-

    return await axios.get(request_data.url, { headers: authHeader }, request_data.params);
    

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 2021-01-12
      • 2019-09-13
      • 2017-09-07
      • 2015-04-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      相关资源
      最近更新 更多