javascript - Nodejs HTTP.get() 添加用户代理

标签 javascript node.js express

我正在创建一个 API,在其中调用 GET 到 musicBrainz API。 我正在使用 Node.js 和 Express。

我的请求被拒绝,因为它们缺少用户代理(根据他们的规则:https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting)

我的代码:


const https = require('https');

    var callmbapi = function(mbid, callback, res) {
    var artistdata = '';
    const mburl = 'https://musicbrainz.org/ws/2/artist/';
    https.get(mburl + mbid + '?inc=release-groups&fmt=json', (resp) => {

        // A chunk of data has been recieved.
         resp.on('data', (chunk) => {
           artistdata += chunk;
        });
        resp.on('end', function () {
            console.log(artistdata);
        });

        }).on("error", (err) => {
            console.log("Error: " + err.message);
    });
};

在我达到没有用户代理的请求限制之前,此请求有效。

我在某处读到我应该有与请求一起发送的选项,并且也尝试过:


const https = require('https');

const options = {
    headers: { "User-Agent": "<my user agent>" }
};

var callmbapi = function(mbid, callback, res) {
    var artistdata = '';
    const mburl = 'https://musicbrainz.org/ws/2/artist/';
    https.get(options, mburl + mbid + '?inc=release-groups&fmt=json', (resp) => {

        // A chunk of data has been recieved.
         resp.on('data', (chunk) => {
           artistdata += chunk;
        });
        resp.on('end', function () {
            console.log(artistdata);
        });

        }).on("error", (err) => {
            console.log("Error: " + err.message);
    });
};

但这不起作用。 我的问题是如何将用户代理添加到我的请求中?

我对此完全陌生,并且在过去的 1.5 小时内一直试图自己找出答案,但似乎这是如此基本,以至于从未在任何地方进行过描述。

最佳答案

对于 Node.js http(s) 模块,函数参数为(url、选项、回调):

import https from 'https';

const options = {
    headers: {
        'User-Agent': 'some app v1.3 (example@gmail.com)',
    }
};

let body = '';
https.get('https://httpbin.org/headers', options, response => {
    console.log('status code:', response.statusCode);

    response.on('data', chunk => body += chunk);
    response.on('end', () => console.log(body + "\n"));
});
PS。 MusicBrainz 要求用户代理的原因是,如果您的客户行为不当,他们会与您联系。因此,请确保在用户代理字符串中包含您的联系信息。

关于javascript - Nodejs HTTP.get() 添加用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096086/

相关文章:

javascript - 如何捕捉 Angular JS 的 ng-click 事件

javascript - Mongoose .js : What are QueryStreams

javascript - ExpressJS Cors 无法在 Angular 上运行

javascript - 回调函数中的递归

javascript - 在自定义文本区域中显示插入符号而不显示其文本

javascript - ExtJS 从 Controller 刷新 View

javascript - 用三个 JS 创建转换管道

node.js - 指定数据库时出现 Auth failed 错误

node.js - 端口 80 上的 SocketIO 与 Express 一起

javascript - Node/Express CRUD API 中返回的 Mongoose 查询