Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Programación web en C++

¿Qué es CGI?

Navegación web

Para comprender el concepto de CGI, veamos qué sucede cuando hacemos clic en un hipervínculo para navegar por una página web o URL en particular.

Sin embargo, es posible configurar el servidor HTTP de tal manera que cada vez que se solicite un archivo en un directorio determinado, ese archivo no se devuelva; en su lugar, se ejecuta como un programa y la salida producida por el programa se envía de vuelta a su navegador para que se muestre.

Common Gateway Interface (CGI) es un protocolo estándar para permitir que las aplicaciones (llamadas programas CGI o scripts CGI) interactúen con servidores web y con clientes. Estos programas CGI pueden estar escritos en Python, PERL, Shell, C o C++, etc.

Diagrama de arquitectura CGI

El siguiente programa simple muestra una arquitectura simple de CGI −

Configuración del servidor web

Antes de continuar con la programación CGI, asegúrese de que su servidor web sea compatible con CGI y esté configurado para manejar programas CGI. Todos los programas CGI que ejecutará el servidor HTTP se guardan en un directorio preconfigurado. Este directorio se denomina directorio CGI y, por convención, se denomina /var/www/cgi-bin. Por convención, los archivos CGI tendrán la extensión .cgi , aunque son ejecutables en C++.

De forma predeterminada, el servidor web Apache está configurado para ejecutar programas CGI en /var/www/cgi-bin. Si desea especificar cualquier otro directorio para ejecutar sus scripts CGI, puede modificar la siguiente sección en el archivo httpd.conf −

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>
 
<Directory "/var/www/cgi-bin">
   Options All
</Directory>

Aquí, asumo que tiene el servidor web funcionando correctamente y puede ejecutar cualquier otro programa CGI como Perl o Shell, etc.

Primer programa CGI

Considere el siguiente contenido del programa C++ −

#include <iostream>
using namespace std;

int main () {
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Hello World - First CGI Program</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! This is my first CGI program</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Compile el código anterior y nombre el ejecutable como cplusplus.cgi. Este archivo se mantiene en el directorio /var/www/cgi-bin y tiene el siguiente contenido. Antes de ejecutar su programa CGI, asegúrese de tener el modo de cambio de archivo usando chmod 755 cplusplus.cgi Comando UNIX para hacer que el archivo sea ejecutable.

Mi primer programa CGI

El programa C ++ anterior es un programa simple que está escribiendo su salida en el archivo STDOUT, es decir, la pantalla. Hay una función importante y adicional disponible que es la impresión de primera línea Content-type:text/html\r\n\r\n . Esta línea se envía de vuelta al navegador y especifica el tipo de contenido que se mostrará en la pantalla del navegador. Ahora debe haber entendido el concepto básico de CGI y puede escribir muchos programas CGI complicados usando Python. Un programa CGI C++ puede interactuar con cualquier otro sistema externo, como RDBMS, para intercambiar información.

Encabezado HTTP

La línea Content-type:text/html\r\n\r\n es una parte del encabezado HTTP, que se envía al navegador para comprender el contenido. Todo el encabezado HTTP tendrá la siguiente forma −

HTTP Field Name: Field Content
 
For Example
Content-type: text/html\r\n\r\n

Hay algunos otros encabezados HTTP importantes, que usará con frecuencia en su Programación CGI.

Sr.No Encabezado y descripción
1

Tipo de contenido:

Una cadena MIME que define el formato del archivo que se devuelve. El ejemplo es tipo de contenido:texto/html.

2

Caduca:Fecha

La fecha en que la información deja de ser válida. Esto debe ser utilizado por el navegador para decidir cuándo debe actualizarse una página. Una cadena de fecha válida debe tener el formato 01 de enero de 1998 12:00:00 GMT.

3

Ubicación:URL

La URL que debe devolverse en lugar de la URL solicitada. Puede usar este archivo para redirigir una solicitud a cualquier archivo.

4

Última modificación:Fecha

La fecha de la última modificación del recurso.

5

Longitud del contenido:N

La longitud, en bytes, de los datos que se devuelven. El navegador usa este valor para informar el tiempo estimado de descarga de un archivo.

6

Configurar-Cookie:Cadena

Establecer la cookie pasada a través de la cadena .

Variables de entorno CGI

Todo el programa CGI tendrá acceso a las siguientes variables de entorno. Estas variables juegan un papel importante al escribir cualquier programa CGI.

Sr.No Nombre y descripción de la variable
1

CONTENT_TYPE

El tipo de datos del contenido, que se utiliza cuando el cliente envía contenido adjunto al servidor. Por ejemplo, carga de archivos, etc.

2

CONTENT_LENGTH

La longitud de la información de consulta que está disponible solo para solicitudes POST.

3

HTTP_COOKIE

Devuelve las cookies establecidas en forma de par clave y valor.

4

HTTP_USER_AGENT

El campo de encabezado de solicitud de agente de usuario contiene información sobre el agente de usuario que origina la solicitud. Es un nombre del navegador web.

5

RUTA_INFO

La ruta para el script CGI.

6

QUERY_STRING

La información codificada en URL que se envía con la solicitud del método GET.

7

DIRECCIÓN_REMOTA

La dirección IP del host remoto que realiza la solicitud. Esto puede ser útil para iniciar sesión o con fines de autenticación.

8

HOST_REMOTO

El nombre completo del host que realiza la solicitud. Si esta información no está disponible, se puede usar REMOTE_ADDR para obtener la dirección IR.

9

REQUEST_METHOD

El método utilizado para realizar la solicitud. Los métodos más comunes son GET y POST.

10

SCRIPT_NOMBRE DE ARCHIVO

La ruta completa al script CGI.

11

SCRIPT_NOMBRE

El nombre del script CGI.

12

NOMBRE_SERVIDOR

El nombre de host o la dirección IP del servidor.

13

SOFTWARE_SERVIDOR

El nombre y la versión del software que está ejecutando el servidor.

Aquí hay un pequeño programa CGI para enumerar todas las variables CGI.

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {
   "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",   
   "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",             
   "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",         
   "HTTP_HOST", "HTTP_USER_AGENT", "PATH",            
   "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",      
   "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
   "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",      
   "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",     
   "SERVER_SIGNATURE","SERVER_SOFTWARE" };   

int main () {
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI Environment Variables</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ ) {
      cout << "<tr><td>" << ENV[ i ] << "</td><td>";
      
      // attempt to retrieve value of environment variable
      char *value = getenv( ENV[ i ].c_str() );  
      if ( value != 0 ) {
         cout << value;                                 
      } else {
         cout << "Environment variable does not exist.";
      }
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Biblioteca CGI de C++

Para ejemplos reales, necesitaría hacer muchas operaciones con su programa CGI. Hay una biblioteca CGI escrita para el programa C++ que puede descargar desde ftp://ftp.gnu.org/gnu/cgicc/ y siga los pasos para instalar la biblioteca −

$tar xzf cgicc-X.X.X.tar.gz 
$cd cgicc-X.X.X/ 
$./configure --prefix=/usr 
$make
$make install

Puede consultar la documentación relacionada disponible en 'C++ CGI Lib Documentation.

Métodos GET y POST

Debe haberse encontrado con muchas situaciones en las que necesita pasar información de su navegador al servidor web y, en última instancia, a su programa CGI. Con mayor frecuencia, el navegador utiliza dos métodos para pasar esta información al servidor web. Estos métodos son el método GET y el método POST.

Pasar información usando el método GET

El método GET envía la información de usuario codificada adjunta a la solicitud de página. La página y la información codificada están separadas por el ? carácter de la siguiente manera −

http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

El método GET es el método predeterminado para pasar información del navegador al servidor web y produce una cadena larga que aparece en el cuadro Ubicación:de su navegador. Nunca use el método GET si tiene una contraseña u otra información confidencial para pasar al servidor. El método GET tiene una limitación de tamaño y puede pasar hasta 1024 caracteres en una cadena de solicitud.

Cuando se usa el método GET, la información se pasa usando el encabezado http QUERY_STRING y será accesible en su programa CGI a través de la variable de entorno QUERY_STRING.

Puede pasar información simplemente concatenando pares de clave y valor junto con cualquier URL o puede usar etiquetas HTML

para pasar información usando el método GET.

Ejemplo de URL simple:método de obtención

Aquí hay una URL simple que pasará dos valores al programa hello_get.py usando el método GET.

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

A continuación se muestra un programa para generar cpp_get.cgi Programa CGI para manejar la entrada proporcionada por el navegador web. Vamos a utilizar la biblioteca CGI de C++ que hace que sea muy fácil acceder a la información pasada −

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>  

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
   
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Using GET and POST Methods</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "First name: " << **fi << endl;  
   } else {
      cout << "No text entered for first name" << endl;  
   }
   
   cout << "<br/>\n";
   fi = formData.getElement("last_name");  
   if( !fi->isEmpty() &&fi != (*formData).end()) {  
      cout << "Last name: " << **fi << endl;  
   } else {
      cout << "No text entered for last name" << endl;  
   }
   
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Ahora, compile el programa anterior de la siguiente manera −

$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

Genere cpp_get.cgi y colóquelo en su directorio CGI e intente acceder usando el siguiente enlace −

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

Esto generaría el siguiente resultado −

First name: ZARA 
Last name: ALI 

Ejemplo de FORM simple:Método GET

Aquí hay un ejemplo simple que pasa dos valores usando FORMULARIO HTML y botón de envío. Vamos a usar el mismo script CGI cpp_get.cgi para manejar esta entrada.

<form action = "/cgi-bin/cpp_get.cgi" method = "get">
   First Name: <input type = "text" name = "first_name">  <br />
 
   Last Name: <input type = "text" name = "last_name" />
   <input type = "submit" value = "Submit" />
</form>

Aquí está el resultado real del formulario anterior. Ingresa Nombre y Apellido y luego hace clic en el botón Enviar para ver el resultado.

Pasar información mediante el método POST

Un método generalmente más confiable para pasar información a un programa CGI es el método POST. Esto empaqueta la información exactamente de la misma manera que los métodos GET, pero en lugar de enviarla como una cadena de texto después de un ? en la URL lo envía como un mensaje separado. Este mensaje llega al script CGI en forma de entrada estándar.

El mismo programa cpp_get.cgi también manejará el método POST. Tomemos el mismo ejemplo anterior, que pasa dos valores usando el FORMULARIO HTML y el botón de enviar, pero esta vez con el método POST de la siguiente manera −

<form action = "/cgi-bin/cpp_get.cgi" method = "post">
   First Name: <input type = "text" name = "first_name"><br />
   Last Name: <input type = "text" name = "last_name" />
 
   <input type = "submit" value = "Submit" />
</form>

Aquí está el resultado real del formulario anterior. Ingresa Nombre y Apellido y luego hace clic en el botón Enviar para ver el resultado.

Pasar datos de casilla de verificación al programa CGI

Las casillas de verificación se utilizan cuando se requiere seleccionar más de una opción.

Aquí hay un código HTML de ejemplo para un formulario con dos casillas de verificación −

<form action = "/cgi-bin/cpp_checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on" /> Maths
   <input type = "checkbox" name = "physics" value = "on" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

El resultado de este código es la siguiente forma −

A continuación se muestra el programa C++, que generará el script cpp_checkbox.cgi para manejar la entrada proporcionada por el navegador web a través del botón de casilla de verificación.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
   bool maths_flag, physics_flag;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Checkbox Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   maths_flag = formData.queryCheckbox("maths");
   if( maths_flag ) {  
      cout << "Maths Flag: ON " << endl;  
   } else {
      cout << "Maths Flag: OFF " << endl;  
   }
   cout << "<br/>\n";

   physics_flag = formData.queryCheckbox("physics");
   if( physics_flag ) {  
      cout << "Physics Flag: ON " << endl;  
   } else {
      cout << "Physics Flag: OFF " << endl;  
   }
   
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Pasar datos de botones de opción a programas CGI

Los botones de radio se utilizan cuando solo se requiere seleccionar una opción.

Aquí hay un código HTML de ejemplo para un formulario con dos botones de opción −

<form action = "/cgi-bin/cpp_radiobutton.cgi" method = "post" target = "_blank">
   <input type = "radio" name = "subject" value = "maths" checked = "checked"/> Maths 
   <input type = "radio" name = "subject" value = "physics" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

El resultado de este código es la siguiente forma −

A continuación se muestra el programa C++, que generará el script cpp_radiobutton.cgi para manejar la entrada proporcionada por el navegador web a través de los botones de opción.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Radio Button Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("subject");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Radio box selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Pasar datos del área de texto al programa CGI

El elemento TEXTAREA se utiliza cuando se debe pasar texto de varias líneas al programa CGI.

Aquí hay un código HTML de ejemplo para un formulario con un cuadro TEXTAREA −

<form action = "/cgi-bin/cpp_textarea.cgi" method = "post" target = "_blank">
   <textarea name = "textcontent" cols = "40" rows = "4">
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit" />
</form>

El resultado de este código es la siguiente forma −

A continuación se muestra el programa C++, que generará el script cpp_textarea.cgi para manejar la entrada proporcionada por el navegador web a través del área de texto.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Text Area Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("textcontent");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Text Content: " << **fi << endl;  
   } else {
      cout << "No text entered" << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Pasar los datos del cuadro desplegable al programa CGI

El cuadro desplegable se utiliza cuando tenemos muchas opciones disponibles, pero solo se seleccionarán una o dos.

Aquí hay un código HTML de ejemplo para un formulario con un cuadro desplegable −

<form action = "/cgi-bin/cpp_dropdown.cgi" method = "post" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   
   <input type = "submit" value = "Submit"/>
</form>

El resultado de este código es la siguiente forma −

A continuación se muestra el programa C++, que generará el script cpp_dropdown.cgi para manejar la entrada proporcionada por el navegador web a través del cuadro desplegable.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Drop Down Box Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("dropdown");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Value Selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Uso de cookies en CGI

El protocolo HTTP es un protocolo sin estado. Pero para un sitio web comercial se requiere mantener información de sesión entre diferentes páginas. Por ejemplo, el registro de un usuario finaliza después de completar muchas páginas. Pero, ¿cómo mantener la información de la sesión del usuario en todas las páginas web?

En muchas situaciones, el uso de cookies es el método más eficiente para recordar y rastrear preferencias, compras, comisiones y otra información necesaria para mejorar la experiencia de los visitantes o las estadísticas del sitio.

Cómo funciona

Su servidor envía algunos datos al navegador del visitante en forma de cookie. El navegador puede aceptar la cookie. Si lo hace, se almacena como un registro de texto sin formato en el disco duro del visitante. Ahora, cuando el visitante llega a otra página de su sitio, la cookie está disponible para su recuperación. Una vez recuperado, su servidor sabe/recuerda lo que se almacenó.

Las cookies son un registro de datos de texto sin formato de 5 campos de longitud variable −

  • Caduca − Esto muestra la fecha en que caducará la cookie. Si está en blanco, la cookie caducará cuando el visitante cierre el navegador.

  • Dominio − Esto muestra el nombre de dominio de su sitio.

  • Ruta − Esto muestra la ruta al directorio o página web que configuró la cookie. Esto puede estar en blanco si desea recuperar la cookie de cualquier directorio o página.

  • Seguro − Si este campo contiene la palabra "seguro", la cookie solo se puede recuperar con un servidor seguro. Si este campo está en blanco, no existe tal restricción.

  • Nombre =Valor − Las cookies se configuran y recuperan en forma de pares de clave y valor.

Configuración de cookies

Es muy fácil enviar cookies al navegador. Estas cookies se enviarán junto con el encabezado HTTP antes del tipo de contenido archivado. Suponiendo que desea configurar el ID de usuario y la contraseña como cookies. Entonces, la configuración de cookies se realizará de la siguiente manera

#include <iostream>
using namespace std;

int main () {
   cout << "Set-Cookie:UserID = XYZ;\r\n";
   cout << "Set-Cookie:Password = XYZ123;\r\n";
   cout << "Set-Cookie:Domain = www.tutorialspoint.com;\r\n";
   cout << "Set-Cookie:Path = /perl;\n";
   cout << "Content-type:text/html\r\n\r\n";

   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   cout << "Setting cookies" << endl;  
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

A partir de este ejemplo, debe haber entendido cómo configurar las cookies. Usamos Set-Cookie Encabezado HTTP para establecer cookies.

Aquí, es opcional establecer atributos de cookies como Expires, Domain y Path. Cabe destacar que las cookies se configuran antes de enviar la línea mágica "Content-type:text/html\r\n\r\n .

Compile el programa anterior para producir setcookies.cgi e intente configurar las cookies usando el siguiente enlace. Establecerá cuatro cookies en su computadora −

/cgi-bin/setcookies.cgi

Recuperación de cookies

Es fácil recuperar todas las cookies configuradas. Las cookies se almacenan en la variable de entorno CGI HTTP_COOKIE y tendrán el siguiente formato.

key1 = value1; key2 = value2; key3 = value3....

Este es un ejemplo de cómo recuperar cookies.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main () {
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // get environment variables
   const CgiEnvironment& env = cgi.getEnvironment();

   for( cci = env.getCookieList().begin();
   cci != env.getCookieList().end(); 
   ++cci ) {
      cout << "<tr><td>" << cci->getName() << "</td><td>";
      cout << cci->getValue();                                 
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Ahora, compile el programa anterior para producir getcookies.cgi e intente obtener una lista de todas las cookies disponibles en su computadora −

/cgi-bin/getcookies.cgi

Esto producirá una lista de las cuatro cookies configuradas en la sección anterior y todas las demás cookies configuradas en su computadora −

UserID XYZ 
Password XYZ123 
Domain www.tutorialspoint.com 
Path /perl 

Ejemplo de carga de archivos

Para cargar un archivo, el formulario HTML debe tener el atributo enctype establecido en multipart/form-data . La etiqueta de entrada con el tipo de archivo creará un botón "Examinar".

<html>
   <body>
      <form enctype = "multipart/form-data" action = "/cgi-bin/cpp_uploadfile.cgi"
         method = "post">
         <p>File: <input type = "file" name = "userfile" /></p>
         <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

El resultado de este código es la siguiente forma −

Nota − El ejemplo anterior se ha deshabilitado intencionalmente para evitar que las personas carguen archivos en nuestro servidor. Pero puede probar el código anterior con su servidor.

Aquí está el script cpp_uploadfile.cpp para manejar la carga de archivos −

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main () {
   Cgicc cgi;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>File Upload in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // get list of files to be uploaded
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // send data type at cout.
      cout << HTTPContentHeader(file->getDataType());
      // write content at cout.
      file->writeToStream(cout);
   }
   cout << "<File uploaded successfully>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

El ejemplo anterior es para escribir contenido en cout pero puede abrir su flujo de archivos y guardar el contenido del archivo cargado en un archivo en la ubicación deseada.

Espero que hayas disfrutado este tutorial. En caso afirmativo, envíenos sus comentarios.


Lenguaje C

  1. Espacios de nombres en la programación de C#
  2. Operadores de C++
  3. Comentarios de C++
  4. Pasar matriz a una función en programación C++
  5. Tutorial C
  6. Descripción general de C++
  7. Constantes/Literales de C++
  8. Operadores en C++
  9. Números en C++
  10. Referencias de C++
  11. Plantillas C++