2017-07-25 5 views
0

J'essaie d'obtenir le corps de l'URL suivante https://extranet.ores.be/de/services/price-simulation en utilisant la requête du module npm. La chose est, pour ce lien, le module ne fonctionne pas correctement, je pense. Parce qu'il échoue continuellement avec une erreur maxRedirects atteinte. J'ai débogué le think et oui parce que le premier appel à l'url est une réponse avec l'en-tête de localisation à la même URL, il fait une boucle infite. On pense, que la redirection ne semble pas être un problème pour firefox ou chrome, ... Les navigateurs le résolvent correctement. Est-ce que je manque quelque chose? ou peut-être le proxy est-il le problème?Bloqué dans une boucle de redirection infinie lorsque http obtient une réponse en bloc

Voici les parties de mon code:

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 }); 
    }) 

Le buildRequest Methode:

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); 

J'ai essayé d'utiliser multipart mais il est de la demande, pas de réponse.

Des idées? merci par avance

Répondre

0

Les navigateurs gèrent correctement l'URL donnée car les cookies sont activés par défaut contrairement à la requête de module du nœud.

Essayez ceci pour votre demande approximé:

var proxiedRequest = request.defaults({ 
    proxy: "http://proxy.xxx.xxxxxxx.be:XXXX", 
    maxRedirects : 5, 
    jar: true // enable cookie 
}); 
+0

Oui, il était cela. Merci :-) –