2008-10-30 20 views

Respuesta

16

En 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 /. Con google.com no parece ser más rápido, pero inténtalo con microsoft.com ... –

8

Bueno, no sé nada sobre Perl o Groovy, así que te daré otro desde un punto de vista HTTP, y tendrás que adaptarte.

Normalmente, realiza una solicitud HTTP y recupera texto HTML junto con un código de respuesta. El código de respuesta para Success es 200. Cualquier código de respuesta en el rango 300 es alguna forma de redirección.

2

En Perl puedes usar LWP::Useragent para eso. Supongo que la manera más fácil es agregar un controlador response_redirect usando add_handler.

4

En referencia a la respuesta de James - sesión HTTP de ejemplo:

$ 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 cabeza en lugar de GET se obtiene sólo el encabezado. "302" significa una redirección temporal, "Ubicación:" es donde se le redirecciona.

3

Una rápida & guión maravilloso sucia para mostrar los conceptos - Nota, esto es usar java.net.HttpURLConnection

Con el fin de detectar la redirección, tiene que usar setFollowRedirects(false). De lo contrario, terminas en la página redirigida de todos modos con un responseCode de 200. El inconveniente es que debes navegar el redireccionamiento tú mismo.

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/"] 
1

Creo que esto funcionará para 301 redireccionamientos.

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