Как вы следуете перенаправлению 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 58

5 ответов:

есть ли модуль-оболочка поверх http для более легкой обработки http-ответов из приложения узла?

request

логика перенаправления в запросе

Если все, что вы хотите сделать, это следовать перенаправляет, но все еще хотите использовать встроенные модули 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:// протокол и он работает.