你如何遵循Node.js中的HTTPredirect?
我想在节点中打开一个页面并处理我的应用程序中的内容。 像这样的东西似乎运作良好:
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/302redirect。 如果有多个redirect,我该如何以可重用的方式来做到这一点? 在http的顶部是否有一个包装模块,可以更轻松地处理来自节点应用程序的http响应处理?
在http的顶部是否有一个包装模块,可以更轻松地处理来自节点应用程序的http响应处理?
request
请求中的redirect逻辑
如果你想要做的是遵循redirect,但仍然想使用内置的HTTP和HTTPS模块,我build议你使用https://github.com/olalonde/follow-redirects 。
所有你需要做的是取代:
var http = require('http');
通过
var http = require('follow-redirects').http;
…所有的请求将自动遵循redirect。
披露:我写了这个模块。
更新:
现在你可以跟随所有redirectvar 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
请求,但是服务器想把它redirect到https
。 发生的是,事实certificate是节点http行为在GET
方法中发送redirect请求(next)而不是这种情况。
我所做的是将我的url更改为https://
协议,它的工作原理。