簡體   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