Node.js无法向zomato.com发送请求
问题描述:
我想向https://zomato.com/发出请求,但没有响应,我可以连接到其他任何地方但不能连接到zomato每次都会发生超时错误。我试图设置用户代理,但它没有工作。我使用节点6.6.0并请求2.79.0。有任何想法吗?Node.js无法向zomato.com发送请求
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
var http = require('http');
request.get({
url: 'http://zomato.com/',
headers: {
'user-ggent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'
}
}, function(error, response, body) {
if(error) {
console.log("Error: " + error);
return;
}
else {
console.log("Status code: " + response.statusCode);
}
});
更新:
我注意到这一点:
curl -X GET "https://zomato.com/"
收益301重定向
答
如果你看一下卷曲zomato.com的输出 - v您可以看到我们正在重定向:
HTTP/1.1 301 Moved Permanently
HTTP/1.1 301 Moved Permanently
所以我们需要添加:
followAllRedirects: true,
这里:
request.get({
url: 'http://zamato.com/',
followAllRedirects: true,
headers: {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'
}
答
我遇到了一些问题,试图做一些网站类似的东西。请尝试NigthmareJS代替要求
我没有测试zomato但这里有我用另一个网站的代码:
var website = new Nightmare()
.useragent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36")
.goto('http://zomatoorwhateverwebsite.com/')
.evaluate(function(){
return document.documentElement.innerHTML;
})
.end()
.then(function(html) {
var $ = cheerio.load(html);
//Do what you need here
})
我希望这有助于。有时您需要添加一些等待()检查文档的额外功能
+0
Html参数每次都是空的。我很确定这是他们的一些安全技巧,但并不知道它是如何工作的。顺便说一句,我发现邮差没有任何额外的头文件很好。 – wyrdrender
+0
是的。我与tripadvisor有同样的问题......我非常确定zomato使用API有时很难取消使用API的网站,因为HTML是,例如,如果他们使用angular,
- {{line.text}}
此修复程序不起作用。 – wyrdrender
我已经更新了我的答案,请再试一次 – NiallJG
我现在能够让程序以'200'响应,你还有问题吗? – NiallJG