Ошибка Node.js: превышено максимальное количество перенаправлений

как я могу игнорировать страницы с циклическими перенаправлениями? Я использую этот код для загрузки страниц:

var libxml = require("libxmljs"),
http = require('follow-redirects').http,
url = require("url");

var request = http.request( { "host": host, "path": URL, "port": 80 }, function( response ) {
        var str = '';
        response.on( 'data', function( chunk ) {
            str += chunk;
        });
        response.on( 'end', function() {
            callback( str, response.statusCode );
        }).on( 'error', function ( err ) {
          console.log( err );
        });
    }).end();

Он не попадет в блок error, и у меня есть исключение:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: Max redirects exceeded.
    at ClientRequest.cb (/var/parsing/node_modules/follow-redirects/create.js:55:19)
    at ClientRequest.g (events.js:199:16)
    at ClientRequest.emit (events.js:107:17)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:426:21)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
    at Socket.socketOnData (_http_client.js:317:20)
    at Socket.emit (events.js:107:17)
    at readableAddChunk (_stream_readable.js:163:16)
    at Socket.Readable.push (_stream_readable.js:126:10)
    at TCP.onread (net.js:538:20)

person Aleksey Solomakha    schedule 22.08.2015    source источник


Ответы (2)


Ошибка возникает из-за объекта запроса, а не из объекта ответа, поэтому вам нужно добавить (дополнительный) error прослушиватель в request;

var request = http.request(...).on('error', function(err) {
  ...
}).end();
person robertklep    schedule 22.08.2015

Просматривая документацию по используемому вами пакету (https://www.npmjs.com/package/follow-redirects), похоже, у него просто есть опция maxRedirects. Непосредственно со связанной страницы:

require('follow-redirects').maxRedirects = 10;   // Has global affect (be careful!) 

https.request({
  host: 'bitly.com',
  path: '/UHfDGO',
  maxRedirects: 3   // per request setting 
}, function (res) {/* ... */});
person kbjr    schedule 22.08.2015