Node.js 302重定向阻止请求中的回调
我注意到一些网站没有关闭302重定向,这导致回调无法启动 有人知道如何补救吗Node.js 302重定向阻止请求中的回调,node.js,Node.js,我注意到一些网站没有关闭302重定向,这导致回调无法启动 有人知道如何补救吗 var request = require('request'); request({url:'http://craigslist.org' }, function (error, response, body) { console.log("Callback Never Runs. "); }); 抱歉,经进一步调查,此建议也失败。但是,当您多次尝试使用您的代码时,这些代码偶尔也会起作用。我想到的最好办法
var request = require('request');
request({url:'http://craigslist.org' }, function (error, response, body)
{
console.log("Callback Never Runs. ");
});
抱歉,经进一步调查,此建议也失败。但是,当您多次尝试使用您的代码时,这些代码偶尔也会起作用。我想到的最好办法是使用超时重试。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个错误。但是,如果您添加了以下重定向:true to your选项,它就会起作用
var request = require('request');
request({
followAllRedirects: true,
url:'http://craigslist.org'
}, function (error, response, body) {
console.log("Callback Never Runs. ");
});
如果您包括一个用户代理,例如: 如果没有这些,Craigslist似乎会让连接保持打开状态,因此不会“结束”或“完成”,也不会调用回调
request({
url: 'http://craigslist.com',
headers: {
'User-Agent': 'Mozilla/5.0 (...) ...'
}
}, function (err, res, body) {
// ...
});