通常在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>
不会发送任何设备信息(来自我所知道的信息)。
有没有办法让网站认为实际设备/浏览器(以及现代设备/浏览器)正在访问它?
答案 0 :(得分:1)
默认情况下,请求包不包含任何设备信息(如提及的问题)。谷歌等大型网站使用此信息来适应页面的各个方面,如HTML版本,CSS / JS功能。较新的用户代理意味着该页面可以使用更多和更新的功能。要模拟任何特定设备(例如,要调试移动页面),请在useragentstring.com选择适当的用户代理。
其他一些标题(例如accept
和accept-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);