Как вы следуете перенаправлению HTTP в узле.Джей?
Я хочу открыть страницу в узле и обработать содержимое в моем приложении. Что-то вроде этого, кажется, работает хорошо:
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
});
Это не работает, однако, если страница возвращает перенаправление 301/302. Как бы я сделал это повторно, если есть несколько перенаправлений? Есть ли модуль-оболочка поверх http для более простой обработки http-ответов из приложения узла?
5 ответов:
Если все, что вы хотите сделать, это следовать перенаправляет, но все еще хотите использовать встроенные модули HTTP и HTTPS, я предлагаю вам использовать https://github.com/olalonde/follow-redirects.
все, что вам нужно сделать, это заменить:
var http = require('http');
by
var http = require('follow-redirects').http;
... и все ваши запросы будут автоматически следовать перенаправлениям.
раскрытие: я написал этот модуль.
обновление:
Теперь вы можете следить за всеми перенаправлениями с
var request = require('request');
С помощьюfollowAllRedirects
парам.request({ followAllRedirects: true, url: url }, function (error, response, body) { if (!error) { console.log(response); } });
сделать еще один запрос на основе
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);
если у вас
https
сервер, измените свой url, чтобы использоватьhttps://
протокол.я попал в аналогичную проблему с этим. Мой URL-адрес
http://
протокол и я хочу сделатьPOST
запрос, но сервер хочет перенаправить его вhttps
. Что происходит, оказывается, узел http поведение отправляет запрос на перенаправление (далее) вGET
метод, который не является таковым.то, что я сделал, это изменить свой url на
https://
протокол и он работает.