2008-10-30 14 views

Antwort

16

In Perl:

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new; 

my $request = HTTP::Request->new(GET => 'http://google.com/'); 
my $response = $ua->request($request); 
if ($response->is_success and $response->previous) { 
    print $request->url, ' redirected to ', $response->request->uri, "\n"; 
} 
+3

s/GET/HEAD /. Mit google.com scheint es nicht schneller, aber versuchen Sie es mit Microsoft.com ... –

8

Nun, ich weiß nichts über Perl oder groovy, also gebe ich Ihnen eine andere aus einer HTTP-Sicht, und Sie müssen anpassen.

Normalerweise machen Sie eine HTTP-Anfrage, und Sie erhalten etwas HTML-Text zusammen mit einem Antwortcode zurück. Der Response-Code für Erfolg ist 200. Jeder Antwortcode in dem 300-Bereich ist eine Form einer Umleitung.

2

In Perl können Sie dafür LWP::Useragent verwenden. Ich denke, der einfachste Weg ist, einen response_redirect Handler unter Verwendung add_handler hinzuzufügen.

4

Mit Bezug auf James Antwort - Beispiel HTTP-Sitzung:

$ telnet www.google.com 80 
HEAD/HTTP/1.1 
HOST: www.google.com 


HTTP/1.1 302 Found 
Location: http://www.google.it/ 
Cache-Control: private 
Content-Type: text/html; charset=UTF-8 
Set-Cookie: ############################## 
Date: Thu, 30 Oct 2008 20:03:36 GMT 
Server: #### 
Content-Length: 218 

Mit HEAD statt erhalten Sie nur den Header erhalten. "302" bedeutet eine temporäre Umleitung, "Location:" ist der Ort, an den Sie weitergeleitet werden.

3

Ein schnellen & schmutzig groovy Skript, um die Konzepte zu zeigen - Beachten Sie, dass dies mit java.net.HttpURLConnection

Um die Umleitung zu erkennen, müssen Sie setFollowRedirects(false) verwenden. Andernfalls landen Sie auf der umgeleiteten Seite sowieso mit einem responseCode von 200. Der Nachteil ist, dass Sie dann selbst die Umleitung navigieren müssen.

1

Ich denke, das wird für 301-Weiterleitungen funktionieren.

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new; 

my $request = HTTP::Request->new(GET => 'http://google.com/'); 
my $response = $ua->request($request); 
if ($response->is_redirect ) { 
    print $request->url . " redirected to location " . $response->header('Location') . "\n"; 
} 
Verwandte Themen