Как получить перенаправленный url-адрес из модуля запроса nodejs?
Я пытаюсь следовать по url, который перенаправляет меня на другую страницу с помощью nodejs запрос модуль.
прочесывая документы, я не смог найти ничего, что позволило бы мне получить 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 );
});
4 ответа:
есть два очень простых способа получить последний url в цепочке перенаправления.
var r = request(url, function (e, response) { r.uri response.request.uri })
uri-это объект. Ури.href содержит url-адрес с параметрами запроса в виде строки.
код исходит из комментария к проблеме 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 три раза (обратите внимание, что мы были перенаправлены на адрес с www из один без).
, чтобы найти URL-адреса перенаправления, попробуйте это:
var url = 'http://www.google.com'; request({ url: url, followRedirect: false }, function (err, res, body) { console.log(res.headers.location); });
request
получает перенаправления по умолчанию, он может пройти через 10 перенаправлений по умолчанию. Вы можете проверить это в docs. Недостатком этого является то, что вы не знаете, является ли 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
как falserequest({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>
так что не беспокойтесь о получении перенаправление содержимого. Но если вы хотите знать, если он перенаправлен или не установлен
followRedirect
false и проверитьlocation
заголовок в ответе.
Вы можете использовать форму функции
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 });