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 |