我刚刚开始学习javascript和https请求。我在Visual Studio 2017中工作,我从模板创建了一个空白的javascript控制台应用程序并添加了以下代码。
const https = require('https');
const options = {
hostname: 'api.gdax.com',
path: '/products/BTC-USD/stats',
method: 'GET',
agent: false
};
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
});
req.end();
我从服务器获得的响应是
{"message":"User-Agent header is required."}
当我在浏览器中导航到https://api.gdax.com/products/BTC-USD/stats时,我得到了正确的答案。为什么我不能在javascript控制台中做同样的事情?
答案 0 :(得分:1)
那是因为该特定API在没有User-Agent标头的情况下阻止了任何请求。
只需添加标题,它就可以正常工作:
const https = require('https');
const options = {
hostname: 'api.gdax.com',
path: '/products/BTC-USD/stats',
method: 'GET',
agent: false,
headers: {
'User-Agent': 'something',
},
};
const req = https.request(options, res => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', d => {
process.stdout.write(d);
});
});
req.on('error', e => {
console.error(e);
});
req.end();
答案 1 :(得分:0)
您需要手动设置标头。有关所有可能的请求选项,请参阅http文档(http
和https
也是如此)。
尝试:
const options = {
hostname: 'api.gdax.com',
path: '/products/BTC-USD/stats',
method: 'GET',
agent: false,
headers: {
'User-Agent': 'Foo/1.0',
},
};
答案 2 :(得分:0)
您需要在请求的User-Agent
属性中明确设置headers
标头options
const options = {
hostname: 'api.gdax.com',
path: '/products/BTC-USD/stats',
method: 'GET',
agent: false,
headers: { 'User-Agent': 'Mosaic/1.0' }
};