CGI con C++

La Interfaz de Enlace Común (Common Gateway Interface) es una especificación que define cómo se comunicarán los programas ejecutables con las páginas HTML, o mejor dicho, con los servidores HTTP. A los programas que interactúan con dichos servidores se les denomina comúnmente Guiones CGI o simplemente CGI. La función principal de un CGI es procesar información que le proporciona el servidor, generalmente debida a peticiones del cliente (usuario), devolviendo la nueva información al servidor. Un ejemplo típico es el procesamiento de formularios: nosotros proporcionamos datos al llenar los campos en éste y los enviamos al servidor, un CGI guardado en el servidor procesa nuestros datos y devuelve una página acorde a dicha información.

Alguna vez pensé que hacer un programa CGI sería muy difícil, afortunadamente estaba equivocado. Aunque generalmente los CGIs se hacen en Perl, yo prefiero usar mi amado C++.

Antes de codificar, debemos saber que:

  1. Cuando envías información al servidor mediante una página y se invoca un CGI, el servidor crea un conjunto de variables de entorno mediante las cuales se pasa información del servidor y del cliente (usuario) al CGI.
  2. Si invocamos al programa desde una página con el método GET, las variables enviadas al CGI serán colocadas en una variable de entorno llamada QUERY_STRING.
  3. Por el contrario, si invocamos al programa con el método POST, las variables se le pasarán al programa por medio de la entrada estándar (como si fuera el teclado).
  4. Los valores de las variables de entorno se obtienen en C++ mediante la función (definida en <cstdlib>) const char *getenv(const char *varname), la cual devuelve un apuntador a una cadena de caracteres que contiene el valor de la variable solicitada en varname. Por lo tanto, será tu trabajo convertir dichas cadenas de caracteres al tipo que necesites para interpretar y procesar la información.
  5. La información que nuestro programa devuelva deberá ser colocada en la salida estándar (cout), que es de donde la tomará el programa (servidor HTTP) que llamó al nuestro.
Ahora vayamos al código C++:

#include <iostream> #include <cstdlib> int main() { /* Es obligatorio decirle al servidor que invocó nuestro programa qué tipo de información le estamos enviando. En este caso enviamos texto HTML, pero tenemos la libertad de enviar varios tipos de archivo. */ std::cout<<"Content-type: text/html\n\n"; //Por último enviamos la información, la cual debería mostrar el nombre del servidor. std::cout<<"<html><head><title>mi primer cgi</title></head><body>mi primer cgi\nServidor: "; std::cout<<getenv("SERVER_NAME")<<"</body></html>"; return 0; }

Una vez compilado el programa anterior (cgi1.exe o cualquier otro nombre), se deberá colocar en el directorio que nos tiene asignado el servidor HTTP. Recuerda que debes tener permiso para ejecutar CGIs (habla con el administrador). Luego, con el siguiente documento HTML, llamaremos a nuestro CGI:

<html> <body> <form method="get" action="./cgi1.exe"> <input type="text"> <input type="submit" value="Enviar"> </form> </body> </html>

Por ahora es todo, posteriormente ampliaremos esta información.

Ariel Medina