¿Cómo se sigue una redirección HTTP en Node.js?
http-redirect (5)
¿Hay un módulo contenedor en la parte superior del http para manejar más fácilmente las respuestas HTTP de procesamiento desde una aplicación de nodo?
Quiero abrir una página en el nodo y procesar los contenidos en mi aplicación. Algo así parece funcionar bien:
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
});
Sin embargo, esto no funciona si la página devuelve un redireccionamiento 301/302. ¿Cómo lo haría de forma reutilizable en caso de que haya redirecciones múltiples? ¿Hay un módulo contenedor en la parte superior del http para manejar más fácilmente las respuestas HTTP de procesamiento desde una aplicación de nodo?
Realice otra solicitud en función de 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);
Si tiene un servidor https
, cambie su url para usar el protocolo https://
.
Me metí en un problema similar con este. Mi URL tiene un protocolo http://
y quiero hacer una solicitud POST
, pero el servidor quiere redirigirla a https
. Lo que ocurre es que, resulta ser el comportamiento http del nodo, envía la solicitud de redireccionamiento (siguiente) en el método GET
, que no es el caso.
Lo que hice fue cambiar mi URL al protocolo https://
y funciona.
Si todo lo que quiere hacer es seguir los redireccionamientos pero aún desea usar los módulos HTTP y HTTPS integrados, le sugiero que use https://github.com/olalonde/follow-redirects .
Todo lo que necesitas hacer es reemplazar:
var http = require(''http'');
por
var http = require(''follow-redirects'').http;
... y todas sus solicitudes seguirán automáticamente los redireccionamientos.
Divulgación: escribí este módulo.
Actualizar:
Ahora puede seguir todos los redireccionamientos con var request = require(''request'');
utilizando el followAllRedirects
.
request({
followAllRedirects: true,
url: url
}, function (error, response, body) {
if (!error) {
console.log(response);
}
});