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

oja*_*eir 4 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);
    });
};
Run Code Online (Sandbox Code Playgroud)

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

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


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);
    });
};
Run Code Online (Sandbox Code Playgroud)

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

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

war*_*arp 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"));
});
Run Code Online (Sandbox Code Playgroud)

附言。MusicBrainz 要求用户代理的原因是,如果您的客户行为不当,他们会与您联系。因此,请确保在用户代理字符串中包含您的联系信息。