Застрял в бесконечном цикле перенаправления, когда http получил фрагментированный ответ

я пытаюсь получить тело следующего URL-адреса https://extranet.ores.be/de/services/price-simulation с помощью запроса модуля npm. Дело в том, что по этой ссылке модуль не работает должным образом, я думаю. Потому что он постоянно терпит неудачу с ошибкой достижения maxRedirects. Я отладил мысль, и да, потому что первый вызов URL-адреса является ответом с заголовком местоположения на тот же URL-адрес, он выполняет бесконечный цикл. Думаю, что перенаправление не кажется проблемой для firefox или chrome, ... Браузеры правильно его разрешают. Я что-то упускаю ? а может проблема в прокси?

Вот части моего кода:

var proxiedRequest = request.defaults({proxy: "http://proxy.xxx.xxxxxxx.be:XXXX", maxRedirects : 5})
    proxiedRequest.get(that.buildRequest(url.url), (error, response, body) => {
        let html = null;
        let status = null;
        let failed = false;

        if (!error && response.statusCode === 200 && (response.headers['content-type'].includes('text/html') || response.headers['content-type'].includes('application/xhtml+xml'))){
            html = body;
        } else if(!error && response.statusCode != 200) {
            status = response.statusCode;
            failed = true;
        }else if(error) {
            failed = true;
        }

        that.emit('getFinished', { html : html, status : status, error : error, failed : failed, url : url } );
    })

Метод buildRequest:

this.buildRequest = function(url){
        return {
            url: url.href,
            headers: {
                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Connection' : 'keep-alive',
                'Accept-Encoding': this.selectAcceptEncodingHeader(url.protocol)
            },
            gzip: true,
            deflate: true
        }
    }.bind(this);
 this.selectAcceptEncodingHeader = function(protocol){
        if(protocol === 'https:'){
            return 'gzip, deflate, br';

        }

        return 'gzip, deflate';
    }.bind(this);

Я пытался использовать multipart, но это для запроса, а не для ответа.

Любые идеи ? заранее спасибо


person Flawinne Julien    schedule 25.07.2017    source источник


Ответы (1)


Браузеры правильно обрабатывают данный URL-адрес, потому что файлы cookie включены по умолчанию, в отличие от запроса модуля от node.

Попробуйте это для вашего прокси-запроса:

var proxiedRequest = request.defaults({
    proxy: "http://proxy.xxx.xxxxxxx.be:XXXX",
    maxRedirects : 5,
    jar: true // enable cookie
});
person Wing-On Yuen    schedule 26.07.2017
comment
Да, это было так. Спасибо :-) - person Flawinne Julien; 28.07.2017
comment
Извините, что это было давно, но я столкнулся с этой проблемой сейчас, и я не могу исправить ошибку. Есть ли другой способ исправить это? Потому что я пробовал, и этот способ не помогает. Можете ли вы попробовать с этого сайта: finance.vietstock.vn? - person Kai; 30.08.2019