Si tengo una URL (por ejemplo, http://www.foo.com/alink.pl?page=2), quiero determinar si se me redirige a otro enlace. También me gustaría saber la URL final (por ejemplo, http://www.foo.com/other_link.pl). Finalmente, quiero poder hacer esto en Perl y Groovy.¿Cómo puedo determinar si una URL redirige?
Respuesta
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";
}
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.
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
.
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.
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/"]
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";
}
- 1. ¿Cómo puedo determinar si una URL redirecciona en PHP?
- 2. PHP: ¿verifica si la URL redirige?
- 3. Determinar si se redirige stdout para un proceso de Python
- 4. obtener la URL, una determinada URL redirige a
- 5. ¿Cómo se redirige de una URL a otra?
- 6. ¿Cómo puedo determinar si una imagen ha sido retocada?
- 7. ¿Cómo puedo determinar si una casilla de verificación está marcada?
- 8. ¿Cómo puedo determinar si una matriz está vacía en PHP?
- 9. ¿Cómo puedo determinar si una función genera un gráfico
- 10. cómo determinar si una imagen es explícita
- 11. determinar si una cadena es URL absoluta o URL relativa en java
- 12. ¿Cómo puedo determinar si se tocó un UILabel?
- 13. Cómo determinar si una URL arbitraria coincide con una ruta definida
- 14. Django redirige a la URL personalizada
- 15. ¿Cómo debería ser una acción de controlador si solo redirige?
- 16. ¿Cómo puedo verificar si una URL es absoluta usando Python?
- 17. C# ¿Cómo puedo verificar si existe una URL/es válida?
- 18. Obtener url después de curl se redirige
- 19. Cómo determinar si una cadena es una URL en Objective-C
- 20. ¿Cómo puedo determinar si Android puede manejar PDF
- 21. ¿Cómo determinar si una secuencia es bitónica?
- 22. ¿Cómo determinar si Type es una estructura?
- 23. ¿Por qué Response.Redirect no redirige una URL externa?
- 24. ¿Cómo saber si una URL es una url de intranet?
- 25. ASP.Net MVC cómo determinar si un usuario puede acceder a una URL?
- 26. ¿Puedo determinar si KeyEventArg es una letra o número?
- 27. ¿Cómo se redirige solo cuando coincide exactamente la url?
- 28. ¿Cómo puedo eliminar una URL?
- 29. ¿Cómo puedo determinar si document.referrer es de mi propio sitio?
- 30. ¿Cómo puedo determinar si se gestiona un proceso en C#?
s/GET/HEAD /. Con google.com no parece ser más rápido, pero inténtalo con microsoft.com ... –