Domanda

Se ho un URL (ad es. http://www.foo.com/ alink.pl?page=2 ), desidero determinare se vengo reindirizzato a un altro link. Vorrei anche conoscere l'URL finale (ad es. http://www.foo.com/other_link. pl ). Infine, voglio poterlo fare in Perl e Groovy.

È stato utile?

Soluzione

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";
}

Altri suggerimenti

Beh, non so nulla di Perl o groovy, quindi te ne darò un altro da un punto di vista HTTP e dovrai adattarti.

Normalmente, fai una richiesta HTTP e ricevi del testo HTML insieme a un codice di risposta. Il codice di risposta per Success è 200. Qualsiasi codice di risposta nell'intervallo 300 è una forma di reindirizzamento.

Riferendosi alla risposta di James - sessione HTTP di esempio:

$ 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

Usando HEAD invece di GET ottieni solo l'intestazione. & Quot; 302 " indica un reindirizzamento temporaneo, " Posizione: " è dove sei reindirizzato a.

Un rapido & amp; script groovy sporco per mostrare i concetti - Nota, questo sta usando java.net.HttpURLConnection

Per rilevare il reindirizzamento, devi usare setFollowRedirects (false) . Altrimenti, si finisce comunque sulla pagina reindirizzata con un responseCode di 200. Il rovescio della medaglia è che devi quindi navigare tu stesso il reindirizzamento.

URL url = new URL ('http://google.com')
HttpURLConnection conn = url.openConnection()
conn.followRedirects = false
conn.requestMethod = 'HEAD'
println conn.responseCode
// Not ideal - should check response code too
if (conn.headerFields.'Location') {
  println conn.headerFields.'Location'
}

301
["http://www.google.com/"]

In Perl puoi usare LWP :: Useragent per quello. Immagino che il modo più semplice sia quello di aggiungere un gestore response_redirect usando add_handler .

Penso che funzionerà con reindirizzamenti 301.

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";
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top