我正在创建一个 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/