Wenn Sie verwenden die voll funktionsfähige Version von LWP::UserAgent, dann ist die zurückgegebene Antwort eine Instanz von HTTP::Response, die wiederum als Attribut eine HTTP::Request hat. Beachten Sie, dass dies NOT ist notwendigerweise die gleiche HTTP :: -Anforderung, die Sie mit der ursprünglichen URL in Ihrer Gruppe von URLs erstellt haben, wie in der HTTP :: Response-Dokumentation für die Methode zum Abrufen der Anforderungsinstanz innerhalb der Antwortinstanz beschrieben:
$ r-> Anfrage ($ request)
Dies wird verwendet, um die Anfrage Attribut zu erhalten/set. Das Anforderungsattribut ist eine Referenz auf die Anforderung, die diese Antwort verursacht hat. Es muss nicht dieselbe Anfrage sein, die an die $ ua> request() -Methode übergeben wird, da es möglicherweise Umleitungen und Autorisierungsversuche dazwischen gegeben hat.
Sobald Sie das Anfrageobjekt haben, können Sie die URI-Methode verwenden, um den URI abzurufen. Wenn Umleitungen verwendet wurden, ist der URI das Ergebnis der Verfolgung der Umleitungskette.
Hier ist ein Perl-Skript, getestet und überprüft, dass Sie das Skelett, was, die Sie brauchen:
#!/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";
}
Dies ist eine Betrogene von http://stackoverflow.com/questions/2010366/how-can- i-find-the-final-URL-nach-allen-Umleitungen-in-perl – Ether