2013-07-26 53 views
1

我注意到一些網站不關閉302重定向導致回調不起火。302重定向防止請求中的回調

任何人都知道如何解決這個問題?

var request = require('request'); 

request({url:'http://craigslist.org' }, function (error, response, body) 
{ 
    console.log("Callback Never Runs. "); 
}); 

回答

0

對不起,經過進一步調查此建議也失敗。但是,當您嘗試多次使用您的代碼時也會偶爾工作。我想到的最好的方法是使用超時重試。超時會觸發整個事件,您可以檢查請求是否真的完成,如果不重試。

var request = require('request'); 

function doRequest(location) { 
    request({ 
     timeout: 5000, // five seconds 
     url:location 
    }, function (error, response, body) { 
     console.log("Callback Never Runs. "); 
    }).on("complete", function(response) { 
     if(!response.complete) setImmediate(function() { 
     doRequest(location); 
     }); 
    }); 
} 

doRequest('http://craigslist.org'); 

您可以進一步擴展爲在發生錯誤前重試X次。

---- ----原始

這可能是在請求的錯誤作爲在這種情況下craigslist.org發送所有302個錯誤。但是,如果您添加followAllRedirects:true to you options it works。

var request = require('request'); 

request({ 
    followAllRedirects: true, 
    url:'http://craigslist.org' 
}, function (error, response, body) { 
    console.log("Callback Never Runs. "); 
}); 
0

它應該工作如果包括User-Agent(如your browser's):

request({ 
    url: 'http://craigslist.com', 
    headers: { 
     'User-Agent': 'Mozilla/5.0 (...) ...' 
    } 
}, function (err, res, body) { 
    // ... 
}); 

不這樣做,Craigslist的似乎離開連接打開,所以也沒有'end''complete'callback不叫。