Como você segue um redirecionamento HTTP em Node.js?

Eu quero abrir uma página no nó e processar o conteúdo em meu aplicativo. Algo assim parece funcionar bem:

var opts = {host: host, path:pathname, port: 80}; http.get(opts, function(res) { var page = ''; res.on('data', function (chunk) { page += chunk; }); res.on('end', function() { // process page }); 

Isso não funciona, no entanto, se a página retornar um redirecionamento 301/302. Como eu faria isso de uma maneira reutilizável no caso de haver vários redirecionamentos? Existe um módulo de wrapper na parte superior do http para manipular mais facilmente o processamento de respostas http de um aplicativo de nó?

Existe um módulo de wrapper na parte superior do http para manipular mais facilmente o processamento de respostas http de um aplicativo de nó?

request

Lógica de redirecionamento na solicitação

Se tudo o que você quiser fazer é seguir os redirecionamentos, mas ainda quiser usar os módulos HTTP e HTTPS internos, sugiro que use https://github.com/olalonde/follow-redirects .

Tudo o que você precisa fazer é replace:

 var http = require('http'); 

de

 var http = require('follow-redirects').http; 

… e todas as suas solicitações seguirão automaticamente os redirecionamentos.

Divulgação: Eu escrevi este módulo.

Atualizar:

Agora você pode seguir todos os redirecionamentos com var request = require('request'); usando o parâmetro followAllRedirects .

 request({ followAllRedirects: true, url: url }, function (error, response, body) { if (!error) { console.log(response); } }); 

Faça outra solicitação com base em response.headers.location :

  const request = function(url) { lib.get(url, (response) => { var body = []; if (response.statusCode == 302) { body = []; request(response.headers.location); } else { response.on("data", /*...*/); response.on("end", /*...*/); }; } ).on("error", /*...*/); }; request(url); 

Se você tiver o servidor https , altere seu URL para usar o protocolo https:// .

Eu entrei em um problema semelhante com este. Meu URL tem o protocolo http:// e eu quero fazer uma solicitação POST , mas o servidor quer redirecioná-lo para https . O que acontece é que, acontece que o comportamento do nó http envia a solicitação de redirecionamento (próxima) no método GET , o que não é o caso.

O que eu fiz foi mudar meu url para o protocolo https:// e funciona.