Latest web development tutorials

Programmation Web de C

Qu'est-ce que CGI?

  • Common Gateway Interface (CGI), est une norme qui définit la manière dont les informations sont échangées entre le serveur Web et le script côté client.
  • spécification CGI est actuellement maintenu par le CGI NCSA, NCSA est défini comme suit:
  • Common Gateway Interface (CGI), est une passerelle pour les programmes externes avec les serveurs d'information (comme serveur HTTP) de norme d'interface d'accueil.
  • La version actuelle est CGI / 1.1, CGI / version 1.2 progresse.

Navigateur Web

Pour mieux comprendre le concept de CGI, nous allons cliquer sur un lien hypertexte, parcourir une page ou une URL spécifique, et de voir ce qui se passe.

  • Votre navigateur liens sur le serveur Web HTTP et demande une URL, qui est, le nom du fichier.
  • serveur Web résout l'URL, et de trouver le nom du fichier. Si vous trouvez le fichier demandé, le serveur Web envoie le fichier au navigateur, sinon envoyer un message d'erreur indiquant que vous demandez un fichier incorrect.
  • navigateur Web pour obtenir une réponse du serveur Web, sur la base de la réponse reçue pour afficher un fichier ou un message d'erreur.

Cependant, de manière à construire un serveur HTTP, peu importe le moment de demander un répertoire de fichiers, le serveur HTTP ne renvoyait le dossier, mais sous la forme d'exécution du programme et la mise en œuvre de la sortie générée est renvoyée à l'affichage du navigateur out.

Common Gateway Interface (CGI), est de faire une application (appelée programmes CGI ou scripts CGI) pour travailler avec les serveurs Web et les clients interagissent protocoles standards. Ces programmes CGI peuvent utiliser Python, PERL, Shell, C ou C ++, etc. pour se préparer.

CGI Graphique

L'illustration suivante montre l'architecture du CGI:

Architecture CGI

la configuration du serveur Web

Avant de faire la programmation CGI, assurez-vous que votre serveur Web prend en charge CGI, et a été configuré pour gérer les programmes CGI. Tous les programmes CGI exécutés par le serveur HTTP, doivent être répertoire pré-configuré. Ce répertoire appelé répertoire CGI, par convention appelé / var / www / cgi-bin. Bien que CGI fichier exécutable est C ++, mais par convention, il est l'extension.cgi.

Par défaut, le serveur Web Apache serait configuré pour fonctionner dans le répertoire / var / www / cgi-bin dans le programme CGI. Si vous souhaitez spécifier un autre répertoire pour exécuter les 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, nous supposons que vous avez déjà un serveur Web et peut être exécuté avec succès, vous pouvez exécuter des programmes CGI, tels que Perl ou Shell et similaires.

Le premier programme de CGI

Considérons le C ++ programme suivant:

#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 - 第一个 CGI 程序</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Compiler le code précédent, le fichier exécutable est nommé cplusplus.cgi, et ce fichier est enregistré dans / var / www / cgi-bin. Avant d' exécuter le programme CGI, s'il vous plaît utiliser lechmod 755 cplusplus.cgi commande UNIXpour changer le mode de fichier, assurez - vous que le fichier est exécutable. fichier exécutable Access, vous verrez la sortie suivante:

Bonjour tout le monde! Ceci est mon premier programme CGI

Le programme ci-dessus de C ++ est un programme simple, il est écrit sur le fichier de sortie STDOUT est affiché sur l'écran. Ici, il convient de noter que la première ligne de sortieContent-Type: text / html \ r \ n \ r \ n.Cette ligne est envoyée au navigateur, et destiné à être affiché dans le type de navigateur contenu de la fenêtre. Vous devez comprendre les concepts de base de CGI, afin d'utiliser davantage Python pour écrire le programme CGI plus complexe. Le programme CGI de C peut être utilisé avec d'autres systèmes externes (SGBDR) pour interagir.

informations d'en-tête HTTP

LigneContent-type: text / html \ r \ n \ r \ n est une partie intégrante des informations d' en- tête HTTP, il est envoyé au navigateur, afin de mieux comprendre le contenu de la page.Dans la forme d'informations d'en-tête HTTP est la suivante:

HTTP 字段名称: 字段内容
 
例如
Content-type: text/html\r\n\r\n

Il existe d'autres informations importantes d'en-tête HTTP, ceux-ci seront souvent utilisés dans votre programmation CGI.

头信息 描述
Content-type: MIME 字符串,定义返回的文件格式。例如 Content-type:text/html。
Expires: Date 信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。
Location: URL 这个 URL 是指应该返回的 URL,而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。
Last-modified: Date 资源的最后修改日期。
Content-length: N 要返回的数据的长度,以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。
Set-Cookie: String 通过string设置 cookie。

Variables d'environnement CGI

Tous les programmes CGI peuvent accéder aux variables d'environnement suivantes. Ces variables lors de l'écriture des programmes CGI jouent un rôle très important.

变量名 描述
CONTENT_TYPE 内容的数据类型。当客户端向服务器发送附加内容时使用。例如,文件上传等功能。
CONTENT_LENGTH 查询的信息长度。只对 POST 请求可用。
HTTP_COOKIE 以键 & 值对的形式返回设置的 cookies。
HTTP_USER_AGENT 用户代理请求标头字段,递交用户发起请求的有关信息,包含了浏览器的名称、版本和其他平台性的附加信息。
PATH_INFO CGI 脚本的路径。
QUERY_STRING 通过 GET 方法发送请求时的 URL 编码信息,包含 URL 中问号后面的参数。
REMOTE_ADDR 发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。
REMOTE_HOST 发出请求的主机的完全限定名称。如果此信息不可用,则可以用 REMOTE_ADDR 来获取 IP 地址。
REQUEST_METHOD 用于发出请求的方法。最常见的方法是 GET 和 POST。
SCRIPT_FILENAME CGI 脚本的完整路径。
SCRIPT_NAME CGI 脚本的名称。
SERVER_NAME 服务器的主机名或 IP 地址。
SERVER_SOFTWARE 服务器上运行的软件的名称和版本。

Les listes suivantes tous les programmes CGI 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 环境变量</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>";
       // 尝试检索环境变量的值
       char *value = getenv( ENV[ i ].c_str() );  
       if ( value != 0 ){
         cout << value;                                 
       }else{
         cout << "环境变量不存在。";
       }
       cout << "</td></tr>\n";
   }
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

bibliothèque C ++ CGI

Dans un exemple réel, vous devez effectuer de nombreuses opérations par les programmes CGI. Il existe un programme conçu spécifiquement pour la bibliothèque de CGI C ++ écrite, nous pouvons ftp://ftp.gnu.org/gnu/cgicc/~~V télécharger cette bibliothèque de CGI, la bibliothèque et installé conformément aux étapes suivantes:

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

Vous pouvez cliquer sur le C ++ CGI Lib la Documentation , voir les documents de la bibliothèque.

Méthodes GET et POST

Vous avez peut-être rencontré une telle situation, quand vous avez besoin de passer des informations à partir du navigateur vers le serveur Web, et enfin transmis au programme CGI. Typiquement navigateurs sont deux façons d'utiliser cette information pour le serveur Web sont des méthodes GET et POST.

Utilisez la méthode GET pour transmettre des informations

GET méthode pour envoyer les informations d'utilisateur codé annexé à la requête de page. Pages et informations codées séparées par caractère, comme suit ?:

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

méthode GET est la méthode du navigateur pour le transfert d'informations sur le serveur Web par défaut, il est une longue chaîne de chaîne est générée dans la barre d'adresse du navigateur. Quand un mot de passe ou d'autres informations sensibles que vous passez sur le serveur, ne pas utiliser la méthode GET. GET méthode est limitée en taille, dans une chaîne de demande de transfert jusqu'à 1024 caractères.

Lorsque vous utilisez la méthode GET est d'utiliser l'en-tête http QUERY_STRING pour transmettre des informations, utilisez la variable d'environnement QUERY_STRING dans les programmes CGI pour l'accès.

Vous pouvez suivre la clé dans l'URL de connexion simple, vous pouvez également utiliser HTML méthode GET <FORM> tag pour transmettre des informations.

Exemples simples URL: Obtenir Méthode

Voici une URL simple, en utilisant la méthode GET pour passer deux valeurs programme hello_get.py.

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

Les exemples suivants génèrent programmeCGI cpp_get.cgi pour traiter l'entrée donnée par le navigateur Web.En utilisant la bibliothèque C ++ CGI, vous pouvez facilement accéder à la transmission de l'information:

#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>使用 GET 和 POST 方法</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "名:" << **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 << "姓:" << **fi << endl;  
   }else{
      cout << "No text entered for last name" << endl;  
   }
   cout << "<br/>\n";

   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Maintenant, compiler le programme ci-dessus comme suit:

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

Générer cpp_get.cgi, et le mettre dans le répertoire CGI et essayer d'ouvrir le lien suivant:

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

On obtient les résultats suivants:

名:ZARA 
姓:ALI 

Des exemples de forme simple: méthode GET

Voici un exemple simple, en utilisant des formulaires HTML et bouton de soumission passe les deux valeurs. Nous allons utiliser le même cpp_get.cgi script CGI pour traiter l'entrée.

<form action="/cgi-bin/cpp_get.cgi" method="get">
名:<input type="text" name="first_name">  <br />
 
姓:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>

Voici la sortie réelle de la forme, entrez le prénom et le nom, puis cliquez sur le bouton Soumettre pour afficher les résultats.

Utilisation de la méthode POST pour transmettre des informations

Une méthode plus fiable de transmettre des informations au programme CGI est la méthode POST. Cette méthode d'emballage des informations avec la méthode GET de la même manière, sauf que ce n'est pas le message comme une chaîne de texte dans l'URL? Après être passé, mais le mettre dans un message séparé sous la forme de livraison. Le message est transmis à l'entrée standard sous la forme de scripts CGI.

Nous utilisons également cpp_get.cgi pour gérer la méthode POST. Prenons le même exemple, pour passer à travers l'utilisation de formulaires HTML et soumettre le bouton deux valeurs, mais cette fois, nous ne sommes pas en utilisant la méthode GET, mais la méthode POST, comme suit:

<form action="/cgi-bin/cpp_get.cgi" method="post">
名:<input type="text" name="first_name"><br />
姓:<input type="text" name="last_name" />
 
<input type="submit" value="提交" />
</form>

programme CGI pour transmettre des données à la boîte

Lorsque vous devez sélectionner plusieurs options, nous utilisons les cases.

L'exemple de code HTML suivant est une forme avec deux cases:

<form action="/cgi-bin/cpp_checkbox.cgi" 
         method="POST" 
         target="_blank">
<input type="checkbox" name="maths" value="on" /> 数学
<input type="checkbox" name="physics" value="on" /> 物理
<input type="submit" value="选择学科" />
</form>

Le programme suivant C ++ générera script cpp_checkbox.cgi pour gérer navigateur Web en entrant dans la zone donnée.

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

Transfert des données au programme sur le bouton radio de CGI

Lorsque seulement besoin de sélectionner une option, nous utilisons des boutons radio.

L'exemple de code HTML suivant est une forme avec deux boutons radio:

<form action="/cgi-bin/cpp_radiobutton.cgi" 
         method="post" 
         target="_blank">
<input type="radio" name="subject" value="maths" 
                                    checked="checked"/> 数学 
<input type="radio" name="subject" value="physics" /> 物理
<input type="submit" value="选择学科" />
</form>

Le programme suivant C ++ générera script cpp_radiobutton.cgi pour gérer l'entrée navigateur Web via le bouton 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>向 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;
}

Transfert des données à un programme zone de texte de CGI

programme CGI lorsque vous avez besoin de transférer plusieurs lignes de texte, nous utilisons l'élément TEXTAREA.

L'exemple de code HTML suivant est une forme avec la boîte de TEXTAREA:

<form action="/cgi-bin/cpp_textarea.cgi" 
         method="post" 
         target="_blank">
<textarea name="textcontent" cols="40" rows="4">
请在这里输入文本...
</textarea>
<input type="submit" value="提交" />
</form>

Le programme suivant C ++ générera script cpp_textarea.cgi pour gérer l'entrée donnée par le navigateur Web, 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>向 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;
}

Zone de liste déroulante pour transmettre des données au programme CGI

Quand il y a plusieurs options disponibles, mais ne peuvent choisir une ou deux options, nous utilisons la boîte déroulante.

L'exemple de code HTML suivant est une forme avec une zone de liste déroulante:

<form action="/cgi-bin/cpp_dropdown.cgi" 
                       method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>数学</option>
<option value="Physics">物理</option>
</select>
<input type="submit" value="提交"/>
</form>

Le programme suivant C ++ générera script cpp_dropdown.cgi pour gérer l'entrée navigateur Web via la liste déroulante donnée.

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

Utilisez des cookies dans CGI,

le protocole HTTP est un protocole sans état. Mais pour un site Web d'entreprise, il a besoin de garder des informations de session entre les différentes pages. Par exemple, un utilisateur après l'achèvement des étapes multiples mettre fin à la page d'enregistrement. Cependant, la façon de maintenir l'information de session de l'utilisateur sur chaque page.

Dans de nombreux cas, l'utilisation de cookies est de se rappeler et suivre les informations concernant les préférences de l'utilisateur, l'achat, commission et autre méthode la plus efficace pour la recherche d'une meilleure expérience du visiteur ou du site statistiques requises information.

Comment ça marche?

Serveur sous la forme d'un cookie pour envoyer des données au navigateur du visiteur. Si le navigateur accepte le cookie, le cookie sera stocké sous forme de texte enregistré sur le disque dur d'un visiteur. Maintenant, quand les visiteurs vers une autre page sur le site, récupère le cookie. Une fois que vous trouvez le cookie, le serveur saura ce qui est stocké.

Un cookie est un pur enregistrements de données de texte, cinq champs de longueur variable avec:

  • Expire: biscuit date d'expiration.Si ce champ est laissé vide, cookie expirera lorsque le visiteur quitte le navigateur.
  • Domaine: Le nom de domaine du site.
  • Chemin: Définir le répertoire chemin du cookie ou une page.Si vous souhaitez récupérer le cookie d'un répertoire ou d'une page, ce champ peut être laissé vide.
  • Sécurité: Si ce champ contient le mot "sécurisé", alors le cookie peut être récupéré par un serveur sécurisé.Si ce champ est laissé vide, qu'il n'y a pas de restrictions.
  • Nom = Valeur: cookie dans la forme de paires clé-valeur à définir et obtenir.

Définition de cookies

Envoyer des cookies dans le navigateur est très simple. Ces cookies seront avant le champ Content-Type, et les en-têtes HTTP pour être envoyés en même temps. Supposons que vous souhaitez définir UserID et mot de passe pour les biscuits, définir des cookies étapes sont les suivantes:

#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.w3cschool.cc;\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>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

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

De cet exemple, nous avons appris comment configurer les cookies. Nous utilisons l' en- têteHTTP Set-Cookie pour définir les cookies.

Voici quelques propriétés à définir des cookies est optionnelle, comme Expire, Domaine et Chemin. Il est à noter, les cookies sont envoyés dans la ligne"Content-Type: text / html \ r \ n \ r \ navant d' être réglé.

Compiler le programme ci-dessus qui génère setcookies.cgi, et essayez d'utiliser le lien suivant pour définir des cookies. Il sera mis en place quatre cookies sur votre ordinateur:

/cgi-bin/setcookies.cgi

Obtenez cookies

cookies pour récupérer tous les paramètres sont très simples. les cookies sont stockés dans les variables d'environnement CGI HTTP_COOKIE et leur forme sont stockées comme suit:

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

L'exemple suivant montre comment obtenir les 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>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // 获取环境变量
   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 génère getcookies.cgi, et essayer d'utiliser le lien suivant pour obtenir tous les cookies disponibles sur votre ordinateur:

/cgi-bin/getcookies.cgi

Ceci va produire une liste qui affiche tous les autres quatre biscuits cookies sur un ensemble et votre ordinateur:

UserID XYZ 
Password XYZ123 
Domain www.w3cschool.cc 
Path /perl 

Exemples de téléchargement de fichiers

Pour télécharger un fichier, formulaire HTML doit enctype attributmultipart / form-data.balise d'entrée avec le type de fichier va créer un bouton "Parcourir".

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

Les résultats de ce code est la forme suivante:

Documents:

Remarque: L'exemple ci - dessus a été délibérément désactivée enregistré sur nos serveurs pour télécharger des fichiers.Vous pouvez essayer le code ci-dessus sur votre serveur.

Le sont utilisés pour traiter lecpp_uploadfile.cpp fichier script de téléchargement ci - dessous:

#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>CGI 中的文件上传</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // 获取要被上传的文件列表
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // 在 cout 中发送数据类型
      cout << HTTPContentHeader(file->getDataType());
      // 在 cout 中写入内容
      file->writeToStream(cout);
   }
   cout << "<文件上传成功>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

L'exemple ci - dessus est d'écrire àcout flux, mais vous pouvez ouvrir le flux de fichiers, et le contenu du fichier téléchargé dans un fichier sur l'emplacement cible.