• Publicidad

Obtener la url de una redirección

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Obtener la url de una redirección

Notapor cojonuo » 2008-08-08 04:33 @231

Hola, quisiera saber cómo podría obtener la url de una redirección, esto es, entro en una página que me redireccióna automáticamente, por eso no hay problema porque LWP::UserAgent se redirecciona correctamente, pero resulta que lo que necesito es exactamente es un atributo de la nueva dirección generada.

Más concretamente, estoy trabajando en un script para youtube, por ejemplo, para la dirección http://www.youtube.com/v/PC4HhI0bK4c me redirecciona http://www.youtube.com/swf/l.swf?video_ ... deo_info=1 de donde necesito ese atributo t.

¿Cómo podría hacerlo?

Gracias.
cojonuo
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2008-08-08 04:27 @227

Publicidad

Notapor explorer » 2008-08-08 18:36 @817

Bienvenido a los foros de Perl en Español, cojonuo.

Se puede realizar con la ayuda de una serie de módulos, muy comunes. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

my $agente    = LWP::UserAgent->new();
my $peticion  = HTTP::Request->new(HEAD => 'http://www.youtube.com/v/PC4HhI0bK4c');
my $respuesta = $agente->simple_request($peticion);

if ($respuesta->is_redirect) {
    my $nueva_direccion = $respuesta->header('location');

    use CGI;
    my $cgi = CGI->new($nueva_direccion);
    print $cgi->param('t'), "\n";
}

__END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Primero creamos un $agente y una $petición HEAD. Y hacemos que el $agente haga la $petición, dándonos una $respuesta. Fijarse que hacemos simple_request() y no request(), porque si no, nos haría la redirección a la nueva URL, de forma automática, y no queremos eso. Nos vale con que nos mande la primera cabecera donde nos informa de la nueva dirección.

Con esa petición HEAD, Perl obtiene esto:
Código: Seleccionar todo
HTTP/1.1 303 See Other
Date: Fri, 08 Aug 2008 23:41:09 GMT
Server: Apache
Expires: Tue, 27 Apr 1971 19:44:06 EST
Cache-Control: no-cache
Location: http://www.youtube.com/swf/l.swf?video_id=PC4HhI0bK4c&rel=1&eurl=&iurl=http%3A//i1.ytimg.com/vi/PC4HhI0bK4c/default.jpg&t=OEgsTo
PDskJIp9i2JtEnbGJ2heQnEpvO&use_get_video_info=1
Keep-Alive: timeout=300
Connection: Keep-Alive
Content-Type: text/plain


Que ves que nos da todo lo que necesitamos.

Si la $respuesta es correcta (es una redirección, efectivamente), extraemos de la cabecera de respuesta la $nueva_dirección.

Esa $nueva_dirección la usamos como germen de un nuevo objeto CGI. Realmente, no es un CGI, pero estamos usando este módulo solo para que nos facilite la labor de parseo de la nueva URL (vagos que somos).

Solo queda por pintar el valor del parámetro 't'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados

cron