【问题标题】:How to Make request to third-party api from node.js and express.js with 'Authorization: Basic' header如何使用“授权:基本”标头从 node.js 和 express.js 向第三方 api 发出请求
【发布时间】:2022-01-16 14:44:26
【问题描述】:

我正在尝试使用 UDEMY API。每个请求必须包含 Authorization: Basic + keys 标头。这是在 api 文档中:

curl --user {YOUR_CLIENT_ID}:{YOUR_CLIENT_SECRET} https://www.udemy.com/api-2.0/courses/

curl -H "Authorization: Basic {BASE64_ENCODED(CLIENT_ID:CLIENT_SECRET)}" https://www.udemy.com/api-2.0/courses/

这是我在下面尝试过的,但我遇到了错误。

const axios = require('axios');
const config = require('../config');


const { app: { API_URL, CLIENT_ID, CLIENT_SECRET } } = config;


var options = {
    method: 'GET',
    url: 'courses',
    baseURL: API_URL,
    headers: {
        'Authorization': 'Basic ' + CLIENT_ID + ':' + CLIENT_SECRET,
    },
    responseType: 'json',
  };

//  Get all Posts handler
exports.getCourses = async(req, res, next) => {
    try {
        const response = await axios(options);
        console.log(response);
        res.status(200).json({ courses: response });

    } catch (error) {
        res.status(500).json({message: 'ERROR: Error Occured!'});
    }
}

这是我得到的错误:

GET http://localhost:3000/api/courses 500 (Internal Server Error)
ERROR Error: Error Code: 500,  Message: Http failure response for http://localhost:3000/api/courses: 500 Internal Server Error

拜托,我需要你的帮助来解决这个问题。

提前致谢!

【问题讨论】:

    标签: node.js angular express


    【解决方案1】:

    根据您的文档,/api-2.0/courses/ 使用 基本身份验证,这是一种内置于 HTTP 协议中的简单身份验证方案。

    从技术上讲,它需要一个标题:

    Authorization : Basic ******
    

    其中 ***** 是 clientid:clientsecret

    的 base64 编码

    类似这样的:

    var clientId = 'Test';
    var clientSecret = '123';
    var authHeaderValue = 'Basic ' + Buffer.from(clientId + ':' + clientSecret).toString('base64');
    

    然后,添加到您的选项中:

    var options = {
        ...
        headers: {
            'Authorization': authHeaderValue
        },
        ...
      };
    

    查看更多示例:

    【讨论】:

    • 感谢@JRichardsz 我将字符串转换为base64,如下所示:``` const client_id = Buffer.from(CLIENT_ID).toString('base64'); const client_secret = Buffer.from(CLIENT_SECRET).toString('base64'); const options = { 方法:'GET',url:'courses/?page=1&page_size=5',baseURL:API_URL,标头:{'Authorization':'Basic' + client_id + ':' + client_secret,},responseType: 'json', };常量响应 = 等待 axios(选项); ``` 但它仍然抛出错误。有什么建议吗?
    • 尝试使用 curl,如果可行,请将其与您的 nodejs 代码进行比较。你的代码也是错误的。我用完整的示例更新了答案
    • 谢谢@JRichardsz!它现在正在按照您编辑的答案工作。
    • 如果这有助于解决您的问题,请单击左侧的复选标记将其标记为已解决和/或向上箭头标记为有用
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 2016-11-11
    • 2014-09-23
    • 2021-07-22
    • 1970-01-01
    • 2021-10-17
    • 2012-08-25
    • 2019-01-24
    相关资源
    最近更新 更多