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:
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.003 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'.