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

时间:2016-09-10 01:25:42

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

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

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

我怀疑它与Google等网站访问的设备/浏览器信息有关。 <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css"> <script src="script.js"></script> </head> <body> <form id="buy" name="buy"> <input type="radio" name="Card_type" value="visa" /> <input type="radio" name="Card_type" value="mastercard" /> <input type="radio" name="Card_type" value="paypal" /> <input type="submit" value="Confirm order"> </form> <script type="text/javascript"> function valiform(event) { event.preventDefault(); var radios = this.querySelectorAll("input[type=radio]") var message = "Error!\n"; function validateRadio(radios) { return Array.prototype.some.call(radios, function(input) { return input.checked }) } if (validateRadio(radios)) { if (radios[2].checked) { alert(radios[2].value + " radio is checked") } event.target.submit(); } else { message += "Please select card.\n"; } if (message != "Error!\n") { alert(message); return false; } } document.getElementById("buy").addEventListener("submit", valiform) </script> </body> </html>不会发送任何设备信息(来自我所知道的信息)。

有没有办法让网站认为实际设备/浏览器(以及现代设备/浏览器)正在访问它?

1 个答案:

答案 0 :(得分: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);