繁体   English   中英

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

[英]302 Redirect prevents callback in Request

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

有人知道如何补救吗?

var request = require('request');

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

抱歉,在进一步调查后,该建议也失败了。 但是,当多次尝试使用您的代码时,它有时也会起作用。 我想出的最好的办法是使用超时重试。 超时会触发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. ");
});

如果您包含User-Agent (例如您的浏览器 ),它应该可以工作:

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

否则,Craigslist似乎会使连接保持打开状态,因此它不会'end''complete' ,也不会调用callback

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM