Internet: ¿qué son las CGI?

 Volver al Indice – Internet y Tutoriales de Diseño Web

Por Alejandro Franco – contáctenos

(C)ommon (G)ateway (I)nterface.

CGI no es más que una forma de COMUNICAR información entre un servidor de web y un programa EJECUTABLE NATIVO que está en la misma máquina que dicho servidor. Comunicar información en ambos sentidos (parámetros y resultados). No es un lenguaje, sólo una forma de pasar información. Lo mismo que la línea de comandos del sistema operativo. De ahí la “interfaz”. Un programa CGI puede estar hecho en CUALQUIER COSA siempre que:

  • 1) Se ejecute en la máquina del servidor
  • 2) Sea capaz de leer variables de entorno y la entrada estándar del sistema operativo (concepto cuasi universal)
  • 3) Sea capaz de escribir en la salida estándar del sistema operativo
  • 4) El servidor sea capaz de ejecutarlo (ej: en NT quizás haya problemas para ejecutar un CGI gráfico)

Para crear el CGI se puede usar Visual Basic, Perl, Rexx, Clipper, Visual C, Borland C, Delphi, etc…
Una vez creado el CGI en tu ordenador, lo pasas al servidor y lo compilas allí.
El hecho de que CGI esté universalmente soportado ayuda a que el fuente de un programa CGI pueda recompilarse y funcionar en cualquier entorno. No obstante, eso dependerá mucho de qué lenguaje se use para desarrollar el programa. Por ejemplo, ISAPI sólo funciona[rá] en Windows.

1.1 Como crear un CGI y ponerlo en tu página

Voy a describir aquí los pasos que uso yo para compilar, copiar y ejecutar un CGI en C y en PERL. Según el proveedor de hosting, puede que los pasos a seguir sean diferentes pero no deberían variar mucho. Si tienes algún problema, consulta con tu proveedor.

1.2.1 Si usas C…

1.2.1.1 Compilando tu CGI

Para compilar el fichero en el servidor, hay que pedir amablemente a los proveedores de hosting que nos den una cuenta personal en users para compilar CGIs. Una vez obtenido el permiso, podemos seguir con el ejemplo. Tenemos el fichero ‘prueba.c’ en el directorio c:pruebas.
Contenido del fichero ‘prueba.c’:

#include<stdio.h>

main()
{
printf(“Content-type: text/htmlnn”);
printf(“<html><body>¡Esto funciona!</body></html>”);
}

Este fichero imprime crea una página web en la que pone:
¡Esto funciona!

Fijaros que en un CGI lo primero que hay que poner es la cabecera, en este caso : Content-type: text/htmlnn
El ‘n’ es un retorno de linea. Siempre debe de haber 2.

Ahora nos conectamos con un programa de FTP (recomiendo el FTP Cute) al directorio que se nos ha asignado en users.
Copiamos el fichero ‘prueba.c’ en formato ASCII al directorio de users que se nos haya asignado.

Una vez copiado y sin cerrar el FTP, abrimos el Telnet. El Telnet lo puedes encontrar en tu disco duro en C:WINDOWS si usas Windows 95. Una vez ejecutado, nos conectamos a users.

Después de pasar por la petición de clave, ponemos ‘dir’ y pulsamos return.
Si lo hemos hecho todo bien, deberíamos de ver nuestro fichero ‘prueba.c’ en el directorio.
Ahora tecleamos ‘gcc -o prueba.cgi prueba.c -s’ para compilar el fichero.

‘gcc’ invoca al compilador de ficheros C

‘-o prueba.cgi’ le dice el nombre del fichero a crear. Si nos olvidamos de este parámetro, obtendremos un fichero llamado ‘a.out’. Si este es el caso, podemos teclear ‘mv a.out prueba.cgi’ para cambiarle el nombre.
‘prueba.c’ es el nombre del fichero que vamos a compilar.
‘-s’ indica al compilador que reduzca todo lo posible el fichero de salida.

Después de la compilación y si tecleamos dir, deberíamos ver 2 ficheros: ‘prueba.c’ y ‘prueba.cgi’. Salimos del Telnet.

1.2.1.2 Copiando el CGI a tu página

Debemos de copiar el fichero ‘prueba.cgi’ al directorio de nuestra página web. Si todavía tenemos abierta la sesión FTP sólo hay que pulsar el botón actualizar sesión.
Ahora copiamos el fichero ‘prueba.cgi’ a nuestro disco duro. Podemos cerrar después la sesión FTP.

Abrimos otra sesión FTP, esta vez hacia el directorio de nuestra página web y copiamos el fichero ‘prueba.cgi’ allí.

Ya tenemos el CGI en nuestra página web. Si ahora vamos a un navegador y tecleamos la dirección donde se encuentra el CGI lo ejecutaremos. Ejemplo:
http://www.jet.es/gregorio/prueba.cgi

Sin embargo recibiremos un molesto error. Tranquilos, no pasa nada. Ahora lo solucionamos.

1.2.1.3 Darle permiso de ejecución al CGI para ejecutarlo

Los sistemas UNIX tiene activada una opción por defecto que anula la posibilidad de ejecución de cualquier cosa a no ser que le dado a nuestro fichero un permiso especial. Por eso antes recibíamos el molesto mensaje de error.

Para darle permiso, se puede usar el programa de FTP. En el caso del FTP Cute, una vez vemos el fichero al que queremos darle el permiso de ejecución, clickeamos en el con el botón derecho del ratón y seleccionamos ‘File Attributes’ del menú emergente.

Ahora hay que darle permiso de lectura o lectura/escritura a nuestro CGI ‘prueba.cgi’
Deberíamos recibir un mensaje advirtiéndonos que hemos cambiado los atributos de un fichero.

Ahora si ejecutamos el CGI desde nuestro navegador, deberíamos ver el esperado mensaje “¡Esto funciona!”.

1.2.2 Si usas PERL…

1.2.2.1 Creando tu CGI

Como el Perl no es un lenguaje compilado como el C, nos saltaremos la ardua tarea de compilar nuestro fuente. Simplemente, crearemos un fichero de texto llamado prueba.txt. DEBERIAMOS usar el procesador de textos más simple que tengamos a fin de que no nos salve carácteres extra en el fichero como hacen el Wordperfect o el Works. Se supone que vamos a usar el Notepad de Windows 95 (también sirve el EDIT del MS-DOS siempre que no usemos carácteres españoles como los acentos o la eñe).

Contenido del fichero prueba.txt:

#!/usr/bin/perl

print “content-type: text/htmlnn”;
print “<HTML>n”;
print “<HEAD>n”;
print “<TITLE>Aprendiendo a crear CGIs</TITLE>n”;
print “</HEAD>n”;
print “<BODY>n”;
print “Enhorabuena. Acabo de crear un CGI ¡y funciona!n”;
print “</BODY></HTML>n”;

Fijaros que en un CGI lo primero que hay que poner es la cabecera, en este caso : Content-type: text/htmlnn
El ‘n’ es un retorno de linea. Siempre debe de haber 2.

1.2.2.2 Copiando el CGI a tu página

Debemos de copiar el fichero ‘prueba.txt’ al directorio de nuestra página web. Abrimos una sesión FTP hacia el directorio de nuestra página web y copiamos el fichero ‘prueba.txt’ allí.

Ya tenemos el CGI en nuestra página web. Si ahora vamos a un navegador y tecleamos la dirección donde se encuentra el CGI lo ejecutaremos. Ejemplo:
http://web.com/gregorio/prueba.txt

Sin embargo, veremos el fuente del fichero como si fuese un texto normal. Tranquilos, no pasa nada. Ahora lo solucionamos.

1.2.2.3 Solucionando los problemas

La respuesta es sencilla: el navegador no sabe que eso es un CGI. Pues no tenemos más que cambiar la extensión de txt por cgi. La razón de no haberlo hecho antes, es que nuestro programa de FTP DEBE transferir los archivos con formato ASCII, es decir, simples ficheros de texto, si intentamos copiar directamente el fichero con el nombre prueba.cgi, casi seguro que no nos va a funcionar porque lo intenará transferir en formato BINARIO.

En los sistemas UNIX, ningún programa funciona hasta que le demos permiso de ejecución. Para darle permiso, se puede usar el programa de FTP. En el caso del FTP Cute, una vez vemos el fichero al que queremos darle el permiso de ejecución, pinchamos en el con el botón derecho del ratón y seleccionamos ‘File Attributes’ del menú emergente.

Ahora hay que darle permiso de lectura o lectura/escritura a nuestro CGI ‘prueba.cgi’
Deberíamos recibir un mensaje advirtiéndonos que hemos cambiado los atributos del fichero.

Si ejecutamos ahora el CGI desde nuestro navegador, deberíamos ver el esperado mensaje de enhorabuena.