Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Programmation Web C++

Qu'est-ce que CGI ?

Navigation Web

Pour comprendre le concept de CGI, voyons ce qui se passe lorsque nous cliquons sur un lien hypertexte pour parcourir une page Web ou une URL particulière.

Cependant, il est possible de configurer le serveur HTTP de manière à ce que chaque fois qu'un fichier dans un certain répertoire est demandé, ce fichier ne soit pas renvoyé ; à la place, il est exécuté en tant que programme et la sortie produite par le programme est renvoyée à votre navigateur pour affichage.

L'interface de passerelle commune (CGI) est un protocole standard permettant aux applications (appelées programmes CGI ou scripts CGI) d'interagir avec les serveurs Web et avec les clients. Ces programmes CGI peuvent être écrits en Python, PERL, Shell, C ou C++ etc.

Schéma d'architecture CGI

Le programme simple suivant montre une architecture simple de CGI −

Configuration du serveur Web

Avant de procéder à la programmation CGI, assurez-vous que votre serveur Web prend en charge CGI et qu'il est configuré pour gérer les programmes CGI. Tous les programmes CGI à exécuter par le serveur HTTP sont conservés dans un répertoire préconfiguré. Ce répertoire est appelé répertoire CGI et par convention il est nommé comme /var/www/cgi-bin. Par convention, les fichiers CGI auront l'extension .cgi , bien qu'ils soient exécutables en C++.

Par défaut, Apache Web Server est configuré pour exécuter des programmes CGI dans /var/www/cgi-bin. Si vous souhaitez spécifier un autre répertoire pour exécuter vos scripts CGI, vous pouvez modifier la section suivante dans le fichier 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>

Ici, je suppose que votre serveur Web est opérationnel et que vous pouvez exécuter n'importe quel autre programme CGI comme Perl ou Shell, etc.

Premier programme CGI

Considérez le contenu suivant du programme 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;
}

Compilez le code ci-dessus et nommez l'exécutable comme cplusplus.cgi. Ce fichier est conservé dans le répertoire /var/www/cgi-bin et son contenu est le suivant. Avant d'exécuter votre programme CGI, assurez-vous d'avoir changé de mode de fichier en utilisant chmod 755 cplusplus.cgi Commande UNIX pour rendre le fichier exécutable.

Mon premier programme CGI

Le programme C++ ci-dessus est un programme simple qui écrit sa sortie sur le fichier STDOUT, c'est-à-dire l'écran. Il y a une fonctionnalité importante et supplémentaire disponible qui est l'impression de première ligne Content-type:text/html\r\n\r\n . Cette ligne est renvoyée au navigateur et spécifie le type de contenu à afficher sur l'écran du navigateur. Vous devez maintenant avoir compris le concept de base de CGI et vous pouvez écrire de nombreux programmes CGI complexes en utilisant Python. Un programme C++ CGI peut interagir avec n'importe quel autre système externe, tel qu'un SGBDR, pour échanger des informations.

En-tête HTTP

La ligne Content-type:text/html\r\n\r\n fait partie de l'en-tête HTTP, qui est envoyé au navigateur pour comprendre le contenu. Tout l'en-tête HTTP sera sous la forme suivante −

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

Il existe peu d'autres en-têtes HTTP importants que vous utiliserez fréquemment dans votre programmation CGI.

Type de contenu :

Une chaîne MIME définissant le format du fichier renvoyé. L'exemple est Content-type:text/html.

Expire :Date

La date à laquelle les informations deviennent invalides. Cela devrait être utilisé par le navigateur pour décider quand une page doit être actualisée. Une chaîne de date valide doit être au format 01 janvier 1998 12:00:00 GMT.

Emplacement :URL

L'URL qui doit être renvoyée à la place de l'URL demandée. Vous pouvez utiliser ce fichier pour rediriger une demande vers n'importe quel fichier.

Dernière modification :date

La date de la dernière modification de la ressource.

Longueur du contenu :N

La longueur, en octets, des données renvoyées. Le navigateur utilise cette valeur pour indiquer le temps de téléchargement estimé d'un fichier.

Set-Cookie :chaîne

Définissez le cookie transmis via la chaîne .

Sr.No En-tête et description
1
2
3
4
5
6

Variables d'environnement CGI

Tout le programme CGI aura accès aux variables d'environnement suivantes. Ces variables jouent un rôle important lors de l'écriture de tout programme CGI.

CONTENT_TYPE

Le type de données du contenu, utilisé lorsque le client envoie le contenu joint au serveur. Par exemple, le téléchargement de fichiers, etc.

CONTENT_LENGTH

La longueur des informations de requête disponibles uniquement pour les requêtes POST.

HTTP_COOKIE

Renvoie les cookies définis sous la forme d'une paire clé/valeur.

HTTP_USER_AGENT

Le champ d'en-tête de demande User-Agent contient des informations sur l'agent utilisateur à l'origine de la demande. Il s'agit du nom du navigateur Web.

PATH_INFO

Le chemin du script CGI.

QUERY_STRING

Les informations codées en URL qui sont envoyées avec la demande de méthode GET.

REMOTE_ADDR

L'adresse IP de l'hôte distant effectuant la demande. Cela peut être utile pour la journalisation ou à des fins d'authentification.

REMOTE_HOST

Le nom complet de l'hôte effectuant la demande. Si ces informations ne sont pas disponibles, REMOTE_ADDR peut être utilisé pour obtenir l'adresse IR.

REQUEST_METHOD

La méthode utilisée pour faire la demande. Les méthodes les plus courantes sont GET et POST.

SCRIPT_FILENAME

Le chemin d'accès complet au script CGI.

SCRIPT_NAME

Le nom du script CGI.

SERVER_NAME

Le nom d'hôte ou l'adresse IP du serveur.

LOGICIEL_SERVEUR

Le nom et la version du logiciel que le serveur exécute.

Sr.No Nom et description de la variable
1
2
3
4
5
6
7
8
9
10
11
12
13

Voici un petit programme CGI pour lister toutes les 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;
}

Bibliothèque CGI C++

Pour des exemples réels, vous auriez besoin de faire de nombreuses opérations par votre programme CGI. Il existe une bibliothèque CGI écrite pour le programme C++ que vous pouvez télécharger depuis ftp://ftp.gnu.org/gnu/cgicc/ et suivez les étapes pour installer la bibliothèque −

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

Vous pouvez consulter la documentation connexe disponible dans "C++ CGI Lib Documentation".

Méthodes GET et POST

Vous devez avoir rencontré de nombreuses situations où vous devez transmettre certaines informations de votre navigateur au serveur Web et, finalement, à votre programme CGI. Le plus souvent, le navigateur utilise deux méthodes pour transmettre ces informations au serveur Web. Ces méthodes sont la méthode GET et la méthode POST.

Transmettre des informations à l'aide de la méthode GET

La méthode GET envoie les informations utilisateur codées ajoutées à la demande de page. La page et les informations encodées sont séparées par le ? caractère comme suit −

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

La méthode GET est la méthode par défaut pour transmettre des informations du navigateur au serveur Web et elle produit une longue chaîne qui apparaît dans la zone Location:de votre navigateur. N'utilisez jamais la méthode GET si vous avez un mot de passe ou d'autres informations sensibles à transmettre au serveur. La méthode GET a une limite de taille et vous pouvez transmettre jusqu'à 1024 caractères dans une chaîne de requête.

Lorsque vous utilisez la méthode GET, les informations sont transmises à l'aide de l'en-tête http QUERY_STRING et seront accessibles dans votre programme CGI via la variable d'environnement QUERY_STRING.

Vous pouvez transmettre des informations en concaténant simplement des paires clé et valeur avec n'importe quelle URL ou vous pouvez utiliser des balises HTML

pour transmettre des informations à l'aide de la méthode GET.

Exemple d'URL simple :méthode Get

Voici une URL simple qui transmettra deux valeurs au programme hello_get.py en utilisant la méthode GET.

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

Ci-dessous un programme pour générer cpp_get.cgi Programme CGI pour gérer les entrées fournies par le navigateur Web. Nous allons utiliser la bibliothèque C++ CGI qui facilite l'accès aux informations transmises −

#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;
}

Maintenant, compilez le programme ci-dessus comme suit −

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

Générez cpp_get.cgi et placez-le dans votre répertoire CGI et essayez d'y accéder en utilisant le lien suivant −

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

Cela générerait le résultat suivant −

First name: ZARA 
Last name: ALI 

Exemple FORM simple :méthode GET

Voici un exemple simple qui transmet deux valeurs à l'aide de HTML FORM et du bouton d'envoi. Nous allons utiliser le même script CGI cpp_get.cgi pour gérer cette entrée.

<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>

Voici la sortie réelle du formulaire ci-dessus. Vous entrez le prénom et le nom, puis cliquez sur le bouton Soumettre pour voir le résultat.

Transmettre des informations à l'aide de la méthode POST

Une méthode généralement plus fiable pour transmettre des informations à un programme CGI est la méthode POST. Cela regroupe les informations exactement de la même manière que les méthodes GET, mais au lieu de les envoyer sous forme de chaîne de texte après un ? dans l'URL, il l'envoie dans un message séparé. Ce message arrive dans le script CGI sous la forme de l'entrée standard.

Le même programme cpp_get.cgi gérera également la méthode POST. Prenons le même exemple que ci-dessus, qui passe deux valeurs en utilisant HTML FORM et le bouton submit mais cette fois avec la méthode POST comme suit −

<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>

Voici la sortie réelle du formulaire ci-dessus. Vous entrez le prénom et le nom, puis cliquez sur le bouton Soumettre pour voir le résultat.

Transmission des données de case à cocher au programme CGI

Les cases à cocher sont utilisées lorsque plusieurs options doivent être sélectionnées.

Voici un exemple de code HTML pour un formulaire avec deux cases à cocher −

<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>

Le résultat de ce code est de la forme suivante −

Ci-dessous se trouve le programme C++, qui générera le script cpp_checkbox.cgi pour gérer les entrées données par le navigateur Web via le bouton de case à cocher.

#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;
}

Transmettre les données du bouton radio au programme CGI

Les boutons radio sont utilisés lorsqu'une seule option doit être sélectionnée.

Voici un exemple de code HTML pour un formulaire avec deux boutons radio −

<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>

Le résultat de ce code est de la forme suivante −

Ci-dessous se trouve le programme C++, qui générera le script cpp_radiobutton.cgi pour gérer les entrées données par le navigateur Web via les boutons radio.

#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;
}

Passer des données de zone de texte au programme CGI

L'élément TEXTAREA est utilisé lorsqu'un texte multiligne doit être transmis au programme CGI.

Voici un exemple de code HTML pour un formulaire avec une zone 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>

Le résultat de ce code est de la forme suivante −

Ci-dessous se trouve le programme C++, qui générera le script cpp_textarea.cgi pour gérer les entrées données par le navigateur Web via la zone de texte.

#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;
}

Transmission des données de la liste déroulante au programme CGI

La liste déroulante est utilisée lorsque de nombreuses options sont disponibles, mais qu'une ou deux seulement seront sélectionnées.

Voici un exemple de code HTML pour un formulaire avec une liste déroulante −

<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>

Le résultat de ce code est de la forme suivante −

Ci-dessous se trouve le programme C++, qui générera le script cpp_dropdown.cgi pour gérer les entrées données par le navigateur Web via la liste déroulante.

#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;
}

Utilisation des cookies dans CGI

Le protocole HTTP est un protocole sans état. Mais pour un site Web commercial, il est nécessaire de conserver les informations de session entre les différentes pages. Par exemple, l'enregistrement d'un utilisateur se termine après avoir terminé plusieurs pages. Mais comment conserver les informations de session de l'utilisateur sur toutes les pages Web.

Dans de nombreuses situations, l'utilisation de cookies est la méthode la plus efficace pour mémoriser et suivre les préférences, les achats, les commissions et d'autres informations nécessaires à une meilleure expérience des visiteurs ou aux statistiques du site.

Comment ça marche

Votre serveur envoie certaines données au navigateur du visiteur sous la forme d'un cookie. Le navigateur peut accepter le cookie. Si c'est le cas, il est stocké sous forme d'enregistrement en texte brut sur le disque dur du visiteur. Désormais, lorsque le visiteur arrive sur une autre page de votre site, le cookie est disponible pour être récupéré. Une fois récupéré, votre serveur sait/se souvient de ce qui a été stocké.

Les cookies sont un enregistrement de données en texte brut de 5 champs de longueur variable −

  • Expire − Ceci indique la date d'expiration du cookie. S'il est vide, le cookie expirera lorsque le visiteur quittera le navigateur.

  • Domaine − Cela montre le nom de domaine de votre site.

  • Chemin − Cela montre le chemin vers le répertoire ou la page Web qui a défini le cookie. Ce champ peut être vide si vous souhaitez récupérer le cookie à partir de n'importe quel répertoire ou page.

  • Sécurisé − Si ce champ contient le mot "sécurisé", alors le cookie ne peut être récupéré qu'avec un serveur sécurisé. Si ce champ est vide, aucune restriction de ce type n'existe.

  • Nom =Valeur − Les cookies sont définis et récupérés sous la forme de paires de clé et de valeur.

Configuration des cookies

Il est très facile d'envoyer des cookies au navigateur. Ces cookies seront envoyés avec l'en-tête HTTP avant le dépôt du type de contenu. En supposant que vous souhaitiez définir l'ID utilisateur et le mot de passe en tant que cookies. Le paramétrage des cookies se fera donc comme suit

#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 cet exemple, vous devez avoir compris comment paramétrer les cookies. Nous utilisons Set-Cookie En-tête HTTP pour définir les cookies.

Ici, il est facultatif de définir des attributs de cookies tels que Expire, Domain et Path. Il est à noter que les cookies sont définis avant l'envoi de la ligne magique "Content-type:text/html\r\n\r\n .

Compilez le programme ci-dessus pour produire setcookies.cgi et essayez de définir des cookies en utilisant le lien suivant. Il installera quatre cookies sur votre ordinateur −

/cgi-bin/setcookies.cgi

Récupération des cookies

Il est facile de récupérer tous les cookies définis. Les cookies sont stockés dans la variable d'environnement CGI HTTP_COOKIE et ils auront la forme suivante.

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

Voici un exemple de récupération des 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;
}

Maintenant, compilez le programme ci-dessus pour produire getcookies.cgi, et essayez d'obtenir une liste de tous les cookies disponibles sur votre ordinateur −

/cgi-bin/getcookies.cgi

Cela produira une liste des quatre cookies définis dans la section précédente et de tous les autres cookies définis sur votre ordinateur −

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

Exemple de téléchargement de fichier

Pour télécharger un fichier, le formulaire HTML doit avoir l'attribut enctype défini sur multipart/form-data . La balise d'entrée avec le type de fichier créera un bouton "Parcourir".

<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>

Le résultat de ce code est de la forme suivante −

Remarque − L'exemple ci-dessus a été désactivé intentionnellement pour empêcher les gens de télécharger des fichiers sur notre serveur. Mais vous pouvez essayer le code ci-dessus avec votre serveur.

Voici le script cpp_uploadfile.cpp pour gérer le téléchargement de fichiers −

#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;
}

L'exemple ci-dessus concerne la rédaction de contenu sur cout mais vous pouvez ouvrir votre flux de fichiers et enregistrer le contenu du fichier téléchargé dans un fichier à l'emplacement souhaité.

J'espère que vous avez apprécié ce tutoriel. Si oui, veuillez nous envoyer vos commentaires.


Langue C

  1. Espaces de noms dans la programmation C#
  2. Opérateurs C++
  3. Commentaires C++
  4. Passage d'un tableau à une fonction en programmation C++
  5. C Tutoriel
  6. Présentation de C++
  7. Constantes/littéraux C++
  8. Opérateurs en C++
  9. Les nombres en C++