如何从nodejs请求模块获取redirect的url?

我试图通过使用nodejs 请求模块redirect到另一个页面的URL。

梳理通过文档,我找不到任何让我在redirect后检索URL。

我的代码如下:

var request = require("request"), options = { uri: 'http://www.someredirect.com/somepage.asp', timeout: 2000, followAllRedirects: true }; request( options, function(error, response, body) { console.log( response ); }); 

有两个非常简单的方法来获得redirect链中的最后一个url。

 var r = request(url, function (e, response) { r.uri response.request.uri }) 

uri是一个对象。 uri.href包含带查询参数的url作为string。

代码来自请求创build者对github问题的评论: https : //github.com/mikeal/request/pull/220#issuecomment-5012579

例:

 var request = require('request'); var r = request.get('http://google.com?q=foo', function (err, res, body) { console.log(r.uri.href); console.log(res.request.uri.href); // Mikael doesn't mention getting the uri using 'this' so maybe it's best to avoid it // please add a comment if you know why this might be bad console.log(this.uri.href); }); 

这将打印三次http://www.google.com/?q=foo (请注意,我们被redirect到一个没有www的地址)。

要findredirecturl,试试这个:

 var url = 'http://www.google.com'; request({ url: url, followRedirect: false }, function (err, res, body) { console.log(res.headers.location); }); 

request默认获取redirect,默认可以通过10个redirect。 你可以在文档中查看。 这方面的缺点是,你不知道你得到的url是默认选项redirect还是原始url。

例如:

 request('http://www.google.com', function (error, response, body) { console.log(response.headers) console.log(body) // Print the google web page. }) 

给出输出

 > { date: 'Wed, 22 May 2013 15:11:58 GMT', expires: '-1', 'cache-control': 'private, max-age=0', 'content-type': 'text/html; charset=ISO-8859-1', server: 'gws', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', 'transfer-encoding': 'chunked' } 

但是如果你给选项followRedirect为false

 request({url:'http://www.google.com',followRedirect :false}, function (error, response, body) { console.log(response.headers) console.log(body) }); 

它给

 > { location: 'http://www.google.co.in/', 'cache-control': 'private', 'content-type': 'text/html; charset=UTF-8', date: 'Wed, 22 May 2013 15:12:27 GMT', server: 'gws', 'content-length': '221', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN' } <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/">here</A>. </BODY></HTML> 

所以不要担心获取redirect的内容。 但是如果你想知道它是否被redirect,或者没有设置followRedirect false,并在响应中检查location标题。

你可以使用函数的forms进行followRedirects ,如下所示:

 options.followRedirects = function(response) { var url = require('url'); var from = response.request.href; var to = url.resolve(response.headers.location, response.request.href); return true; }; request(options, function(error, response, body) { // normal code });