Introducción
En este tutorial vamos a ver como podemos enviar formas o datos a CGI's u otros tipos de documentos, simulando el envío de POST o GET.
A diferencia de otros tutoriales, en este va a ser necesario que leas y comprendas totalmente 2 tutoriales dentro del sitio, pues escribí este tutorial suponiendo que ya manejas bien esos temas.
Los tutoriales son:
Agregando
Si recuerdas en el tutorial anterior aprendimos como leer un documento via HTTP, pues siguiendo la misma sintaxis, vamos a aumentar un par de lineas para enviar datos junto el "pedido" de el documento.
Ahora vamos a ver un ejemplo de un POST a un cgi, así que vamos a empezar inicializando las variables.
Para nuestro ejemplo vamos a suponer que tenemos un cgi que se llama "datos.cgi", por lo que nuestra variable de $url va a ser:
my $url = "http://misitio.com/cgi-bin/datos.cgi";
Ahora digamos que el CGI pide unos datos como pueden ser: nombre, apellido y edad.
Si recuerdas en el tutorial de Leer datos en tu CGI vimos como debe de ser la sintaxis de los "querys" de GET, donde cada variable debe de estar separada por el símbolo de '&'.
En esta caso digamos que nombre=Uriel, apellido=Lizama y edad=18 por lo que nuestra variable $query va a ser:
my $query = "nombre=Uriel&apellido=Lizama&Edad=18";
Listo, ya tenemos nuestras variables, ahora vayamos con el código principal.
Si recuerda creamos un objeto de HTTP::Request para pedir el documento HTTP de esta manera:
my $req = HTTP::Request->new(POST => $url);
Ahora, después de la linea vamos a aumentar un par de lineas de código mas para enviar los datos que queremos:
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);
La primera linea lo que nos dice es el tipo de datos que estamos enviando, que en este caso estamos diciendo que es una forma con los datos codificados. No voy a dar detalles de esto pues es tema para otro tutorial.
La segunda linea es simplemente el "query" que queremos enviar, el cual ya vimos antes.
NOTA: Recuerda que puedes decidir como enviar los datos, pueden ser por medio de POST o de GET. En este ejemplo usamos POST
Muy bien pues ya vimos como enviar datos por medio de CGI.
Notas Finales
Recuerda que siempre antes de enviar los datos a los documentos cheques si lo debes de hacer por medio de POST o de GET (los métodos mas comunes), de lo contrario lo más seguro es que recibas un error.
Código Final
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use LWP::UserAgent;
use HTTP::Request;
my $url = "http://misitio.com/cgi-bin/datos.cgi";
my $query = "nombre=Uriel&apellido=Lizama&Edad=18";
my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
my $req = HTTP::Request->new(POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);
my $response = $ua->request($req);
my $content = $response->content(); #contenido de la respuesta
print "Content-type: text/html\n\n";
print $content;