为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Node.js中遵循HTTP重定向?

/ 猿问

如何在Node.js中遵循HTTP重定向?

慕田峪4524236 2019-11-14 15:38:26

我想在节点中打开一个页面并处理应用程序中的内容。像这样的事情似乎运作良好:


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响应?


查看完整描述

3 回答

?
蝴蝶刀刀

如果您要做的只是跟随重定向,但仍想使用内置的HTTP和HTTPS模块,则建议您使用https://github.com/follow-redirects/follow-redirects。


yarn add follow-redirects

npm install follow-redirects

您需要做的就是更换:


var http = require('http');


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

...,您的所有请求将自动跟随重定向。


披露:我写了这个模块。


查看完整回答
反对 回复 2019-11-14
?
慕斯王

现在,您可以var request = require('request');使用followAllRedirects参数进行所有重定向。


request({

  followAllRedirects: true,

  url: url

}, function (error, response, body) {

  if (!error) {

    console.log(response);

  }

});


查看完整回答
反对 回复 2019-11-14
?
芜湖不芜

这是我用来获取已重定向的网址的函数:


const http = require('http');

const url = require('url');


function get({path, host}, callback) {

    http.get({

        path,

        host

    }, function(response) {

        if (response.headers.location) {    

            var loc = response.headers.location;

            if (loc.match(/^http/)) {

                loc = new Url(loc);

                host = loc.host;

                path = loc.path;

            } else {

                path = loc;

            }

            get({host, path}, callback);

        } else {

            callback(response);

        }

    });

}

它的工作原理与http.get相同,但遵循重定向。


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信