1

我正在尝试使用 npm 模块请求获取以下网址https://extranet.ores.be/de/services/price-simulation的正文。问题是,对于这个链接,我认为该模块无法正常工作。因为它不断失败并出现 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);

我尝试使用多部分,但它是用于请求,而不是响应。

有任何想法吗 ?提前感谢

4

1 回答 1

2

浏览器会正确处理给定的 url,因为默认情况下会启用 cookie,这与来自节点的模块请求不同。

为您的代理请求尝试此操作:

var proxiedRequest = request.defaults({
    proxy: "http://proxy.xxx.xxxxxxx.be:XXXX",
    maxRedirects : 5,
    jar: true // enable cookie
});
于 2017-07-26T21:04:55.187 回答