En este capítulo analizaremos como puede un CGI recibir información desde el mundo externo.
Aparte de lo que tradicionalmente puede obtener un programa desde el sistema operativo un CGI recibe
información en dos formas diferentes.
- i) Datos que el Browser envía al Servidor Web y que a su vez tienen dos componentes
- Datos de sí mismo y de la conexión (son enviados siempre).
- Datos ingresados en un form o pasados como parametros (Sólo si existen).
- ii) Datos que el Servidor Web pone por defecto a disposición del CGI con información sobre sí mismo.
En este capítulo nos concentraremos en los datos que siempre son pasados al CGI y la manera de recogerlos.
Algunos de estos datos son:
|
HTTP_REFERER |
Documento que está solicitando el CGI. |
HTTP_USER_AGENT |
Browser que está usando el visitante. |
HTTP_USER_OS |
Sistema operativo está usando el visitante. |
REMOTE_HOST |
Nombre del equipo que está pidiendo el cgi (habitualmente el Módem del ISP que está usando el visitante). |
REMOTE_ADDR |
Dirección IP del visitante. |
Una lista completa y explicada está disponible en el apéndice 1 de este tutorial. |
Cuando un Servidor Web ejecuta un CGI, levanta un proceso hijo con un juego independiente de variables
de entorno conteniendo estos datos.
La manera de leer estos datos en C es usando la función getenv( char *nombre), en Perl
la función $ENV{"NOMBRE"}, y con Server Sides Includes nombre de la variable. Un ejemplo en C se implementa en el programa espia cuyo código (Resumido) es el siguiente:
Se incluye un ejemplo en Perl, otro usando Server Side Includes y otro con el Shell de Unix
Pero el más completo es el hecho en C
|
/* ****************************
Programa Espia
(EXTRACTO)
Autor: Juan Manuel Doren
Compilar en unix con: gcc -i espia.c -o espia.cgi
**************************** */
#include <stdlib.h>
void imprimeVariable( char *lpzNombre );
int main(){
/* *********************************** */
printf("Content-Type: text/html\n\n");
printf("<html><body bgcolor=#ffffff text=#ffffff>\n");
printf("<p align=center><table cellpadding=4 bgcolor=000000>\n");
printf("<tr><td color=000080 align=center>");
printf("<b>Variables del Sistema</b></td></tr>\n");
// El programa de ejemplo que Ud. puede bajar incluye mas
// llamadas a estas funciones
imprimeVariable("REMOTE_ADDR");
imprimeVariable("REMOTE_HOST");
printf("</table>\n");
printf("</body></html>");
return( 0 );
}
void imprimeVariable( char *lpzNombre ){
/* *********************************** */
printf("<tr>\n");
printf("<td bgcolor=\"#9999FF\" valign=top>%s</td>\n",lpzNombre);
printf("<td bgcolor=\"#DDDDFF\" valign=top><font color=#000000>");
printf("%s",getenv(lpzNombre));
printf("</td>\n");
printf("</tr>\n");
}
|
El programa utiliza el mismo metodo visto en el Capítulo 1 para generar una página HTML. La función imprimeVariable() recibe como parámetro el nombre de la variable que se desea mostrar, imprime el código HTML necesario para formatear la salida y mediante una invocación a getenv(Nombre) recupera el valor que se solicita. En algunos casos las variables no devuelven nada. En el Apéndice 1 se discute el significado de cada una de estas y los momentos en que tienen un contenido.
|