Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso de CGI
Curso de CGI
com/
Curso de CGI
Curso de CGI
En este curso se explica qu es un CGI, cmo se hacen y qu cosas hay que tener en cuenta. Los temas a tratar no son demasiado largos, lo que hace de este curso ms bien un mini-curso, del que el lector debe extraer las conclusiones pertinentes y ampliar lo aprendido a base de desarrollar programas propios. Captulo 1 Captulo 2 Captulo 3 Captulo 4 Introduccin Las variables de entorno El primer C GI: Hola Mundo! Tratamiento de formularios
http://rinconprog.metropoli2000.com
-2-
Curso de CGI
??Con la directiva <FORM>: si necesitamos que el CGI use la informa cin que nos da un usuario al
rellenar un form, hemos de indicarlo en el parmetro ACTION. Cuando pulsemos SUBMIT se llamar al programa CGI y se le enviar la informacin del formulario. Es conveniente que en ACTION especifiquemos una informacin vlida.
http://rinconprog.metropoli2000.com
-3-
Curso de CGI
??Con la etiqueta <A>. Por ejemplo, <A HREF="/cgibin/fichero.cgi?vble1=valor&vble2=valor">Pulse por aqu</A>
Esto significa que queremos que se ejecute el programa 'fichero.cgi', situado en el directorio '/cgi-bin' del servidor. Adems, al pulsar sobre el enlace se le pasar la informacin de dos variables, cuyos nombres son vble1 y vble2, que tomarn los valores respectivos valor y valor. El programa CGI recibir la cadena vble1=valor&vble2=valor. Podemos ver que lo que hay tras el interrogante separa el nombre del programa CGI de los parmetros que va a recibir. Adems, los parmetros y sus valores estn separados por un signo igual, =, mientras que dos parmetros distintos vienen separados por un ampersand, &. Esto es importante de cara a cmo procesaremos la informacin que nos llega.
http://rinconprog.metropoli2000.com
-4-
Curso de CGI
http://rinconprog.metropoli2000.com
-5-
Curso de CGI
http://ladireccionquesea/cgi-bin/HolaMundo.cgi. Como veis, es un programa en C normal y corriente. La primera lnea es la que comentaba que es necesaria para que el navegador sepa qu informacin se le va a enviar. En realidad, son dos lneas, la primera, que debe llevar Content-Type:tipo/subtipo y la segunda en blanco, por eso tras escribir la primera lnea est el \n\n.
http://rinconprog.metropoli2000.com
-6-
Curso de CGI
En Content-Type podemos poner ms cosas; vamos a ver una pequea tablita con los tipos ms frecuentes: Encabezado text/html text/plain image/gif image/jpeg application/zip audio/x-wav audio/midi video/mpeg video/xmsvideo Significado Este ya lo conocemos; se trata de un documento HTML Texto plano, es decir, ASCII puro y duro Imagen en formato GIF Imagen en formato JPEG, que puede tener una de estas extensiones: .jpeg, .jpg, .jpe Archivo comprimido en formato ZIP Archivo de sonido en formato WAV Archivo de sonido en formato MIDI, que tendr la extensin .mid Archivo de vdeo en formato MPEG, que tendr una de las siguientes extensioes: .mpeg, .mpg, .mpe Archivo de vdeo en formato AVI
Visto esto, podemos ir plantendonos crear unas funciones que podemos agrupar en una librera y que, por ahora, podran ir escribiendo las cabeceras HTML en la salida estndar. Hecho esto, cuando furamos a escribir un programa CGI, quedara como esto: /* Esquema de CGI */ #include "cabeceras.h" int main() { /* Definicin de variables */ EscribeCabeceraHTML(); /* Aqu est el trabajo que realiza el CGI */ EscribePieHTML(); return 0; } Y en el fichero 'cabeceras.h' tendramos las funciones 'EscribeCabeceraHTML' y 'EscribePieHTML', que se encargara n de toda la parte de sacar el 'Content-Type', <HTML>, <HEAD>, <BODY>, </BODY>, etc. Para practicar con esto podeis ir crendoos vuestras libreras que saquen por salida estndar las cabeceras/pies. Adems, dado que todo lo que va en un CGI es un programa absolutamente normal, podeis hacer, por ejemplo, que la salida genere una tabla por medio de bucles, u otras cosas que se os ocurran. Nos vemos en el captulo siguiente, en el que explicaremos cmo dar tratamiento a un formulario.
http://rinconprog.metropoli2000.com
-7-
Curso de CGI
http://rinconprog.metropoli2000.com
-8-
Curso de CGI
La siguiente funcin realiza la tarea de meter en una cadena la informacin del formulario, decidiendo qu hacer segn el mtodo con el que le hayan llegado los datos: void Recibir_Parametros(char **parametros) int longitud; char *QStr; {
if(strcmp(getenv("REQUEST_METHOD"),"POST")==0) { longitud = atoi(getenv("CONTENT_LENGTH")); *parametros = (char*)malloc((longitud+1)*sizeof(char)); gets(*parametros); } else { QStr = getenv("QUERY_STRING"); longitud = strlen(QStr); *parametros = (char*)malloc((longitud+1)*sizeof(char)); strcpy(*parametros,QStr); } } Usarla es sencillo: nos declaramos una variable de tipo char* en la funcin principal, y luego le pasamos su direccin a esta funcin. Ahora que tenemos los datos, no hemos de olvidar que tenemos que tratarlos, puesto que los datos que recibimos tienen la forma: vble1=valor1&vble2=valor2&...&vbleN=valorN es decir, pares variable=valor separados por el smbolo &. Adems, los espacios sern convertidos a un signo ms (+), y los caracteres especiales (espacio incluido) vendrn codificados en la forma %HH, donde HH son dos dgitos hexadecimales. Ser tarea nuestra decodificar estos datos para terminar obteniendo los valores correctos de las variables que recibamos en el CGI. En la siguiente pgina: http://www.ok.cl/cgi/downloads/cgiforms.htm podreis encontrar varias funciones para esto que os sern de utilidad.
http://rinconprog.metropoli2000.com
-9-