我注意到有些网站没有关闭302重定向,导致回调无法触发。
任何人都知道如何解决这个问题?
var request = require('request');
request({url:'http://craigslist.org' }, function (error, response, body)
{
console.log("Callback Never Runs. ");
});
答案 0 :(得分:0)
对不起,经过进一步调查,这个建议也失败了。但是,当你的代码尝试多次时,偶尔会有效。我提出的最好的是使用超时重试。 timeout会触发complete事件,您可以检查请求是否真的完成,如果没有重试。
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,那么你可以使用它。
var request = require('request');
request({
followAllRedirects: true,
url:'http://craigslist.org'
}, function (error, response, body) {
console.log("Callback Never Runs. ");
});
答案 1 :(得分: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
。