Как вы следуете за HTTP-переадресацией в Node.js?

Я хочу открыть страницу в узле и обработать содержимое в моем приложении. Кажется, что-то вроде этого хорошо работает:

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

Однако это не работает, если страница возвращает redirect 301/302. Как я могу сделать это многоразовым способом, если есть несколько перенаправлений? Есть ли модуль-shell поверх http, чтобы более легко обрабатывать HTTP-ответы от приложения-узла?

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

request

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

Если все, что вы хотите сделать, это redirect, но все же хотите использовать встроенные модули HTTP и HTTPS, я предлагаю вам использовать https://github.com/olalonde/follow-redirects .

Все, что вам нужно сделать, это заменить:

 var http = require('http'); 

от

 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:// protocol, и он работает.

  • Как удалить модули npm в узле js?
  • Команды npm не работают на WSL с zsh
  • NodeJS записывает файл изображения base64
  • Заменить строку в файле с помощью nodejs
  • Перенаправление HTTP на HTTPS в App Engine
  • Ошибка: getaddrinfo ENOTFOUND в nodejs для вызова
  • Как я могу получить список обратных вызовов в рабочей очереди узла? (или, почему Node не выйдет?)
  • Многострочные обновления PostgreSQL в Node.js
  • Как обмениваться сеансами с Socket.IO 1.x и Express 4.x?
  • Быстрый файловый сервер Node.js (статические файлы через HTTP)
  • Что произойдет, если я отклоняю / разрешаю несколько раз в цикле Крисковаля?
  • Давайте будем гением компьютера.