Если вы используете полнофункциональную версию LWP::UserAgent, то ответ, который возвращается, представляет собой экземпляр HTTP::Response, который, в свою очередь, имеет атрибут HTTP::Request. Обратите внимание, что это NOT обязательно тот же HTTP :: Запрос, который вы создали с исходным URL-адресом в своем наборе URL-адресов, как описано в документации HTTP :: Response для способа получения экземпляра запроса в экземпляре ответа:
$ r-> запрос ($ запрос)
Это используется, чтобы получить/установить атрибут запроса. Атрибут request - это ссылка на запрос, вызвавший этот ответ. Это не обязательно должен быть тот же запрос, переданный методу $ ua-> request(), потому что между ними могут быть повторные перенаправления и авторизации.
Как только у вас есть объект запроса, вы можете использовать метод uri для получения URI. Если были использованы перенаправления, URI является результатом следования цепочке перенаправления.
Вот скрипт Perl, испытано и проверено, что дает скелет, что вам нужно:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $ua; # Instance of LWP::UserAgent
my $req; # Instance of (original) request
my $res; # Instance of HTTP::Response returned via request method
$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);
$req = HTTP::Request->new(HEAD => 'http://www.ecu.edu/wllc');
$req->header('Accept' => 'text/html');
$res = $ua->request($req);
if ($res->is_success) {
# Using double method invocation, prob. want to do testing of
# whether res is defined.
# This is inline version of
# my $finalrequest = $res->request();
# print "Final URL = " . $finalrequest->url() . "\n";
print "Final URI = " . $res->request()->uri() . "\n";
} else {
print "Error: " . $res->status_line . "\n";
}
Это является контратип http://stackoverflow.com/questions/2010366/how-can- i-find-the-final-url-after-all-redirections-in-perl – Ether