2017-02-09 82 views
2

我想向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重定向

回答

-1

如果你看一下捲曲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' 
     } 
+0

此修復程序不起作用。 – wyrdrender

+0

我已經更新了我的答案,請再試一次 – NiallJG

+0

我現在能夠讓程序以'200'響應,你還有問題嗎? – NiallJG

1

我遇到了一些問題,試圖做一些網站類似的東西。請嘗試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}}
但是沒有調用API,這意味着什麼都沒有。也許嘗試檢查開發工具上的網絡調用,有時您可以瞭解如何調用API,然後很容易獲取數據。祝你好運 – perseus