【问题标题】:Node.js request module getting modern version of websiteNode.js 请求模块获取现代版本的网站
【发布时间】:2016-09-10 01:25:42
【问题描述】:

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

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

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

有没有什么方法可以让网站误以为是由实际的设备/浏览器(以及现代设备/浏览器)访问的?

【问题讨论】:

  • 你能检查一下用户代理吗?如果没有发送用户代理,那可能是您的问题。尝试使用最新的。
  • @Hele 我如何将用户代理更改为最新版本的 Chrome?我可以使用任何示例或库吗?

标签: javascript node.js http network-programming http-request


【解决方案1】:

默认情况下,请求包不包含任何设备信息(如问题所述)。像谷歌这样的大网站使用这些信息来适应页面的各个方面,比如 HTML 版本、CSS/JS 特性。更新的用户代理意味着页面可以使用更多更新的功能。要模拟任何特定设备(例如调试移动页面),请在 useragentstring.com 选择适当的用户代理。

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);

【讨论】:

  • 太棒了。您可能想为未来的读者添加解释/澄清(赞成:))。
猜你喜欢
  • 2016-05-25
  • 2016-10-15
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多