Come si segue un reindirizzamento HTTP in Node.js?

Voglio aprire una pagina nel nodo ed elaborare i contenuti nella mia applicazione. Qualcosa di simile sembra funzionare bene:

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

Ciò non funziona, tuttavia, se la pagina restituisce un reindirizzamento 301/302. Come faccio a farlo in modo riutilizzabile nel caso in cui ci siano più reindirizzamenti? Esiste un modulo wrapper in cima al http per gestire più facilmente le risposte HTTP di elaborazione da un’applicazione nodo?

Esiste un modulo wrapper in cima al http per gestire più facilmente le risposte HTTP di elaborazione da un’applicazione nodo?

request

Logica di reindirizzamento su richiesta

Se tutto ciò che si vuole fare è seguire i reindirizzamenti ma si desidera comunque utilizzare i moduli HTTP e HTTPS integrati, suggerisco di utilizzare https://github.com/olalonde/follow-redirects .

Tutto quello che devi fare è sostituire:

 var http = require('http'); 

di

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

… e tutte le tue richieste seguiranno automaticamente i reindirizzamenti.

Divulgazione: ho scritto questo modulo.

Aggiornare:

Ora puoi seguire tutti i reindirizzamenti con var request = require('request'); utilizzando il parametro followAllRedirects .

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

Esegui un’altra richiesta basata su 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 hai un server https , modifica l’URL per utilizzare il protocollo https:// .

Ho avuto problemi simili con questo. Il mio URL ha protocollo http:// e voglio fare una richiesta POST , ma il server vuole redirect a https . Quello che succede è che, risultando essere il comportamento del nodo http, invia la richiesta di reindirizzamento (successiva) nel metodo GET che non è il caso.

Quello che ho fatto è cambiare il mio url in https:// protocol e funziona.