节点 `https.get` 返回 403,`axios.get` 和 `curl` 返回 200

jun*_*var 4 javascript node.js axios

我正在尝试使用 Node 的本机https模块和第 3 方axios模块(非常常用)执行 GET 请求:

const endpoint = 'https://www.pathofexile.com/api/trade/data/stats';

require('axios')
    .get(endpoint)
    .then(response => console.log('axios', response.status));
// prints 200

require('https')
    .get(endpoint, {},
        response => console.log('https', response.statusCode));
// prints 403
Run Code Online (Sandbox Code Playgroud)

axios请求按预期正常工作;response.data我也可以查看。但https请求失败并返回 403。

  • 奇怪的是,几个月前我上次检查时,两者都可以工作。
  • 我尚未更新计算机上的 Node(节点 v 14.5.0)。我也在另一台机器上尝试过(13.3.0)。
  • curl从命令行也可以正常工作。

由于https曾经工作过,我的预感是服务器一定已经改变了一些东西,并且https.get必须axios.get做一些稍微不同的事情(例如默认发送不同的标头),而服务器不再对此漠不关心。

Mar*_*lli 8

经过一些测试后,我注意到默认情况下该https模块不包含User-Agent头,而axioscurl两者都包含。服务器拒绝您的请求,因为您没有User-Agent设置。

要解决此问题,只需指定您选择的自定义User-Agent

require('https')
    .get(endpoint, {headers: {'User-Agent': 'whatever'}},
        response => console.log('https', response.statusCode));
Run Code Online (Sandbox Code Playgroud)