无限redirect服务器端http请求
我使用node.js,但我有一种感觉,这不一定与节点有关 – 无论如何
我正在编写一个url缩短在节点,我想击中缩短的url,以获得页面标题 – 这在大多数情况下,通常遵循redirect,等等适当,等等。
但是,当我点击gmail.com,它进入一个无限的redirect循环 – http://gmail.comredirect到https://www.google.com/accounds/ServiceLogin?service=mail&passive=true&rm=false&continue= …而这又转向自己永远。
我的代码基本上是这样的
var http = require('http'), https = require('https'), URL = require('url'), querystring = require('url'); var http_client = {}; function _makeRequest(url, callback) { var urlInfo = URL.parse(url); var reqUrl = urlInfo.pathname || '/'; reqUrl += urlInfo.search || ''; reqUrl += urlInfo.hash || ''; var opts = { host: urlInfo.hostname, port: urlInfo.port || (urlInfo.protocol == 'https' ? 443 : 80), path = reqUrl, method: 'GET' }; var protocol = (urlInfo.protocol == 'https' ? https : http); var req = protocol.request(opts, function(res) { var content = ''; res.setEncoding('utf8'); res.addListener('data', function(chunk) { content += chunk; }); res.addListener('end', function() { _requestReceived(content, res.headers, callback); }); }); req.end(); }; function _requestReceived(content, headers, callback) { var redirect = false; if(headers.location) { newLocation = headers.location redirect = true; } if(redirect) { console.log('redirecting to :'+newLocation); _makeRequest(newLocation, callback) } else { callback(null, content); } };
是的!
啊,好吧,明白了!
我的https检查就像
var protocol = (urlInfo.protocol == 'https' ? https : http);
但节点添加冒号的协议,所以它应该是
var protocol = (urlInfo.protocol == 'https:' ? https : http);
正因为如此,使用http和gmail才会redirect到https永远