VARIABLE DE ENTORNO CGI: Especificas de la petición
Información sobre la petición recibida: CONTENT_LENGTH -Tamaño en números decimales de octetos y cualquier otra entidad adjunta PATH_INFO -Ruta que debe interpretar una aplicación CGI QUERY_STRING -Cadena de búsqueda URL-encoded. REMOTE_ADDR -Dirección IP del agente que hace la petición REMOTE_HOST -Nombre del dominio que realiza la petición REQUEST_METHOD -Metido de petición por el cliente. SCRIPT_NAME -URI para identificar la aplicación CGI
VARIABLE DE ENTORNO CGI: Especificas de la petición
Información sobre la petición recibida: CONTENT_TYPE -El tipo MIME de una entidad adjunta Tipos: Aplication -transmiten datos de la aplicación Text -Información textual (ej: plain) Multipart -Partes múltiples de tipos de datos independientes( ej: mixed, alternative.. Message -Un mensaje encapsulado (ej: partial, External-body) Image -Datos de imagen (ej: gif, jpeg) Audio – Datos de audio (ej: basic) Video -Datos de video (ej mpeg)
VARIABLE DE ENTORNO CGI: ACCESO DESDE C #include < stdio.h>
char *variable;
Variable=getenv(SERVER_NAME); }
Establecimiento de la comunicación con el cliente El servidor añade a la respuesta del CGI mas datos para devolver un mensaje HTTP correcto. Si no se quiere que el servidor trate los datos devueltos por el CGI: Añadir el prefijo nph-(No Parser Header) al nombre del CGI.
Referenciar un CGI Usando etiquetas HTML < a href=direccion_del_CGI>texto < /a> ej:< a href=http://www.zonaweb.es/cgi-bin/hora.cgi>Dime la hora < /a>
Usando un formulario(lo más habitual) < form action=direccion_del_CGI>< !– elementos del formulario–>< /form>
LOS FORMULARIOS Y CGI Uso de GET Se utiliza para obtener un fichero o recurso La vble de entorno QUERY_STRING lee los datos Tamaño limitado: 256 caracteres No registra cada petición Uso de POST Se usa para enviar datos al servidor Los datos se leen por la entrada estandar Tamaño ilimitado (CONTENT_LEGTH devuelve el tamaño) Registra cada petición
LOS FORMULARIOS Y CGI El navegador envía los datos de la siguiente forma: ej: control1=valor1& control2=valor2& control3=valor3 Para campos sin valor: ej control1=& control2=valor2& control3=valor3 Caracteres para dividir los datos: &: Separa las diferentes parejas campo/valor. =: Separa el campo de su valor %xx: identifica los caracteres especiales +: Para codificar los espacios.
Envio de informacion del servidor al CGI: Línea de comandos ? :Separa el CGI de los argumentos + : separa los argumentos entre sí.
Cada palabra es un parámetro que le llega al CGI (argv). Los datos se encuentran en QYERY_STRING.
< a href=/cgi-bin/cgi?arg1+arg2+arg3>enlace< /a>
Envio de informacion del servidor al CGI: Entrada estandar Envío mediante un formulario con POST. Se recibe por la entrada estándar Uso de las vbles: CONTENT_LENGTH CONTENT_TYPE
Envio de informacion del servidor al CGI: Información de ruta de directorios
Utilizando la vble de entorno PATH_INFO.
< a href=/cgi-bin/cgi/MasInformación?arg1+arg2+arg3>enlace< /a>
Envio de informacion del servidor al CGI: URL Envio mediante formularios con GET. Formato: nom_cgi?campo1=valor1&camop2=valor2 Los datos los recibe la vble QUERY_STRING.
Ej: < a href=programaCGI.exe?arg1=1&arg2=5>pincha aquí < /a>
Ejemplo con formulario: < html> < head>< title>ejemplo de CGIs con Formulario < /title>< /head> < body> < form action="form.cgi" method="get"> < tr> < td>< b>Ejemplo de Formulario< /b>< br> < br> < /td> < /tr> < tr>< td>Nombre< /td> < td>< input type="text" maxlength="160" size="40" name="nombre"> < /td> < br> < /tr> < tr>< td>Color< /td> < td>< SELECT NAME="color"> < OPTION>Blanco < OPTION>Azul < OPTION>Rojo < /SELECT >
< /td> < /tr> < tr>< td>País< /td> < td>< SELECT NAME="pais"> < OPTION value="cl">Francia < OPTION value="es">España < OPTION value="zz">Portugal < /SELECT > < /td> < br> < /tr> < tr> < td>< INPUT TYPE="submit" VALUE="Enviar datos"> < /td> < /tr> < /table> < /form> < /body> < /html>
Ejemplo con formulario: #include < stdio.h> #include "cgiforms.h" #define LARGO_MAXIMO 1024 void imprimeVariable( char *lpzNombre );
main(){ printf("Content-Type: text/htmlnn"); 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>Campos recibidos desde el Form< /b>< /td>< /tr>n"); imprimeVariable( "nombre" ); imprimeVariable( "color" ); imprimeVariable( "pais" ); printf("< /table>n"); printf("< /body>< /html>"); return( 0 ); } void imprimeVariable( char *lpzNombre ){ /*** recibe el nombre de la variable yla imprime formateada como celdas de una tabla***/ char lpzResultado[LARGO_MAXIMO]; printf("< tr>n"); printf("< td bgcolor="#9999FF" valign=top>%s< /td>n",Nombre); printf("< td bgcolor="#DDDDFF" valign=top>< font color=#000000>"); /***aqui pide la variable y luego la imprime***/ formPideVariable( lpzNombre,lpzResultado,LARGO_MAXIMO); printf(¨[%s]",lpzResultado); printf("< /td>n"); printf("< /tr>n");
Ejemplo con formulario:
Página anterior | Volver al principio del trabajo | Página siguiente |