Esta es la funci�n m�s com�n para los CGIs hoy en d�a. Llamar a un CGI directamente desde un enlace, como hemos hecho hasta ahora, s�lo permite pasarle unos par�metros fijados al escribir el c�digo HTML de la p�gina. Los formularios permiten que el navegante introduzca toda clase de informaci�n, que sea mandada al servidor y procesada por el CGI. Los programas usados son los mismos que hemos visto hasta ahora.
C�mo ya vimos al hablar de formularios, la forma de indicar la direcci�n del programa CGI que debe procesar la informaci�n se indica en el atributo ACTION:
<form action="cgi-bin/procesaform"> </form>
Cuando el usuario pulse al bot�n de env�o del formulario el navegador llamar� al CGI y mandar� con la llamada toda la informaci�n que se haya introducida. Esta informaci�n estar� codificada en pares nombre_campo/valor. Adem�s la informaci�n sufrir� una codificaci�n especial, siguiendo las siguientes normas:
- Cada par nombre_campo/valor est� separado por un ampersand: &
- Los valores est�n del nombre del campo por el signo igual: =
- Todos los caracteres especiales, es decir, aquellos que no pertenezcan al ASCII de 7 bits ser�n codificados con tres s�mbolos: Un signo de porcentaje y un valor hexadecimal de dos d�gitos indicando su n�mero de ASCII extendido: %NN
Tambi�n ser�n enviados de esta manera los caracteres especiales, incluyendo &, = y % para no confundir cuando se usan como datos y cuando se usan como car�cter de control.
- Por �ltimo todos los espacios se codifican con el signo +.
Debido a esta codificaci�n lo primero que debe hacer todo CGI ser� llevar a cabo una decodificaci�n.
�GET y POST
Los dos m�todos para mandar la informaci�n asociada a un formulario son GET y POST. Cual usar� el navegador se indicar� en el c�digo HTML con el atributo METHOD.
Si usamos GET todos los datos se almacenar�n en la variable de entorno QUERY_STRING, y el programa CGI debe leerlos de ah�. El problema es que esta variable suele tener una longitud limitada. En ocasiones esta limitaci�n es de 256 caracteres, lo que limita su uso a formularios muy sencillos. Cabe decir que en los casos de la secci�n anterior en los que invoc�bamos a un CGI con la etiqueta A, est�bamos usando este m�todo.
Si usamos POST el CGI recibir� los datos por la entrada est�ndar, y por tanto no hay limitaci�n en el tama�o de los mismos. Si es necesario conocer dicho tama�o para procesar los datos puede obtenerse leyendo la variable de entorno CONTENT_LENGTH. �ste es el m�todo m�s seguro de usar y por tanto el m�s utilizado.
�Variables de un CGI
Como hemos visto, es habitual que un CGI deje informaci�n en una variable de entorno. Existen una serie de variables extra donde se almacena informaci�n de gran utilidad, como la direcci�n IP del navegante, el navegador que usa, etc. Las m�s importantes est�n resumidas en la siguiente tabla:
Variable | Significado |
---|---|
SERVER_NAME | Direcci�n IP del host donde est� el CGI. |
SERVER_SOFTWARE | Tipo de servidor Web que se est� usando. |
GATEWAY_INTERFACE | Versi�n del interfaz CGI. |
SERVER_PROTOCOL | Versi�n del protocolo HTTP. |
SERVER_PORT | El puerto TCP que se est� usando. En la mayor�a de servidores Web es el 80. |
REQUEST_METHOD | M�todo de env�o de informaci�n: POST o GET. |
HTTP_ACCEPT | Lista de los tipos MIME (content-types) que acepta el navegador. |
HTTP_USER_AGENT | El navegador usado por el usuario. |
HTTP_REFERER | Direcci�n URL del documento HTML donde estaba el formulario. |
PATH_INFO | Informaci�n extra (visto antes) |
PATH_TRANSLATED | La variable PATH_INFO adaptada al sistema espec�fico donde est� el CGI. |
SCRIPT_NAME | Nombre del CGI. |
QUERY_STRING | Argumentos pasado al CGI. |
REMOTE_HOST | Nombre del ordenador que envi� los datos. |
REMOTE_ADDR | Direcci�n IP de dicho ordenador. |
REMOTE_USER | Nombre del usuario. |
REMOTE_IDENT | Sirve para el m�todo de identificaci�n ident. |
CONTENT_TYPE | Tipo de informaci�n que llega por la entrada est�ndar. Por defecto ser�: x-www-form-urlencoded que es la codificaci�n que hemos visto antes. |
CONTENT_LENGTH | Longitud de los datos que llegan por la entrada est�ndar cuando hemos usado POST. |