不在标头Node.js控制台应用程序中发送userAgent

时间:2017-11-15 17:02:53

标签: javascript node.js https console request

我刚刚开始学习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控制台中做同样的事情?

3 个答案:

答案 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文档(httphttps也是如此)。

尝试:

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' }
};