Node.js 请求模块获取现代版本的网站

Node.js request module getting modern version of website

通常在使用 Node.js 中的 request 模块发出 GET 请求时,会返回网站 HTML 的最旧版本。

例如,向 http://google.com 发出请求时返回了一个非常旧的版本 Google。另一方面,在浏览器中访问 Google returns 一个更现代的网站版本。

我怀疑它与 Google 等网站访问的 device/browser 信息有关。 request 不发送任何设备信息(据我所知)。

有什么方法可以让网站认为它们正在被实际的 device/browser(以及现代的)访问吗?

默认情况下,请求包不包含任何设备信息(如问题所述)。 google 等大型网站使用此信息来适应页面的各个方面,例如 HTML 版本、CSS/JS 功能。较新 user-agent 表示该页面可以使用更多更新的功能。要模拟任何特定设备(例如,要调试移动页面),请在 useragentstring.com.

处选择适当的 user-agent

其他一些 headers,如 acceptaccept-encoding 也会影响这一点(此处为 Doc)。

试试这个代码(取自docs):

var request = require('request');

var options = {
  url: 'https://google.com',
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
  }
};

function callback(error, response, body)
{
  console.log(body);
}

request(options, callback);