Programación Web y Scripting > Perl

 Problemas Con Lwp::useragent

(1/2) > >>

borix69:
Hola a tod@s,

Estoy encontrando problemas con mi script de perl cuando intento descargar algún fichero desde un servidor HTTPS externo.

Mi entorno es el siguiente:

- Sistema operativo: Suse Linux Enterprise Server 8
- Perl 5.8.0-58
- Libwww-perl 5.65-41
- Crypt-SSLeay 0.51
- Cron 3.0.1-649

Mi script de perl es tiene entre otras cosas:

/********************************************/
my $ua = LWP::UserAgent->new;

$ua->timeout(20);
# $ua->env_proxy;

$nombrefichero = shift(@ARGV);
my @URLS = ('https://midominio/' . $nombrefichero);

my $response = $ua->get($laurl);
/********************************************/

El caso es que cuando ejecuto el script desde la consola del linux, el fichero se descarga sin ningún problema generando la siguiente traza:

/********************************************/
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: GET https://midominio/mifichero
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
SSL_connect:SSL renegotiate ciphers
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write certificate verify A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 1000 bytes
LWP::UserAgent::request: Simple response: OK
/********************************************/

Pero si intento automatizar la tarea de descargar el fichero con el cron, cuando este lo ejecuta, obtengo la siguiente traza de error:

/********************************************/
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: GET https://midominio/mifichero
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::UserAgent::request: Simple response: Internal Server Error
/********************************************/

y el fichero no se descarga.

¿ Alguien tiene alguna idea ?, ¿ pueden ser las variables de entorno ?.

Muchas gracias.

borix69:
He visto que el proceso falla cuando lo automatizo con el cron o cuando lo ejecuto desde consola directamente con un usuario distinto de root, obteniendo:

LWP::UserAgent::new: ()
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: GET https://midominio/mifichero
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::UserAgent::request: Simple response: Internal Server Error

Alguna idea ?

su -:
Hola.
Yo lo hago asi:

--- Código: Text ---#!/usr/bin/perl -wuse strict;use LWP::UserAgent;my ($link, $salida) = @ARGV;my $ua = LWP::UserAgent->new();$ua->agent("SoloCodigoBrowser/v0.1");#Por carinomy $return = $ua->get($link);if($return->is_error()){  die "Error con $link: $response->status_line";}else { #....}  Espero que te sirva.
 :hola:

su -:
Ha, si, tienes que hacer un:
open FL, "+>$salida" or die "Error: $!";
print FL $return;
close FL;
 :whistling:

borix69:
Gracias por tus comentarios su !!!

Mi problema al final era otro, resulta muy curioso pero salvo con el usuario root, con todos los demás y con la automatización no me cogía las rutas relativas de los certificados. Al ponerle las rutas absolutas a las variables de entorno:

$ENV{HTTPS_CA_FILE}
$ENV{HTTPS_PKCS12_FILE}
$ENV{HTTPS_PKCS12_PASSWORD}

ya funcionó.

Un saludo y gracias.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa