302重定向阻止请求中的回调

时间:2013-07-26 17:38:40

标签: node.js

我注意到有些网站没有关闭302重定向,导致回调无法触发。

任何人都知道如何解决这个问题?

var request = require('request');

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

2 个答案:

答案 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