Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 302重定向阻止请求中的回调_Node.js - Fatal编程技术网

Node.js 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. "); }); 抱歉,经进一步调查,此建议也失败。但是,当您多次尝试使用您的代码时,这些代码偶尔也会起作用。我想到的最好办法

我注意到一些网站没有关闭302重定向,这导致回调无法启动

有人知道如何补救吗

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) {
    // ...
});