• Publicidad

Problemas con HTTP::Request

¿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.

Problemas con HTTP::Request

Notapor sirwallo » 2006-07-20 02:30 @146

Hola
El problema es que estoy haciendo un script que llame a una url y le envie unos datos, funcionar funciona, pero el problema es cuando algunos de los datos que envio lleva un espacio, es decir si mando una variable con espacios no se me envian. Este es el codigo que estoy utilizando

Código: Seleccionar todo
$parametros_llamada="variable=sirwallo envia datos"
my $req = HTTP::Request->new(POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($parametros_llamada);
my $response_web = $ua->request($req);
my $content_xml = $response_web->content();


Si envio esto en la otra pagina llegan los datos de la variable sin espacios.


Un saludo y gracias
sirwallo
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2006-07-18 02:54 @162

Publicidad

Solucionado

Notapor sirwallo » 2006-07-20 03:50 @201

Ya he conseguido solucionarlo lo he solucionado codificando los datos a enviar, para ello he utilizado una funcion que codifica.

Código: Seleccionar todo
#funcion que codifica la url
sub URLEncode {
    my $theURL = $_[0];
    my $MetaChars = quotemeta( ';,/?\|=+)(*&^%$#@!~`:');
   $theURL =~ s/([$MetaChars\"\'\x80-\xFF])/"%" . uc(sprintf("%2.2x",         ord($1)))/eg;
   $theURL =~ s/ /\+/g;
   return $theURL;
}


y en la url tambien indico que codificacion que estoy utilizando

Código: Seleccionar todo
my $req = HTTP::Request->new(POST => $url_consulta);
my $query="encoding=UTF-8&b=".&URLEncode($cgi->param('url_boja'))."&buscar=buscar";
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);


Bueno si alguien tiene alguna idea de hacerlo de otra manera que sea mejor?

Un saludo y gracias
sirwallo
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2006-07-18 02:54 @162

Notapor explorer » 2006-07-20 06:43 @321

El módulo HTTP::Request::Common puede echar una mano...
Código: Seleccionar todo
use HTTP::Request::Common 'POST';
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $req = POST
    $url_consulta,
    [
        encoding => 'UTF-8',
        b => $cgi->param('url_boja'),
        buscar => 'buscar',
    ];
print $ua->request($req)->as_string;
(sacado de lwpcook).

Pero hay otras opciones... yo lo intentaría con WWW::Mechanize si se trata de dialogar con una página web.

Mira este ejemplo:
http://search.cpan.org/~corion/WWW-Mech ... m#SYNOPSIS

Si sólo quieres 'escapar' los caracteres, mira este hilo en este foro. El módulo URI::Escape tiene la función uri_escape que se encarga de ese trabajo.
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

Notapor kidd » 2006-07-20 10:08 @464

Hola:

También si lo deseas existe el módulo URI::Escape que te codifica los valores en base a RFC 2732 para que puedas pasar tus valores por medio de urls sin problemas.

Como ves en Perl tienes varias maneras de lograr una misma cosa, solamente es cuestión de que decidas cual es la mejor para tu caso.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

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

cron