Latest web development tutorials

C ++ Programmazione Web

Che cosa è CGI?

  • Common Gateway Interface (CGI), è uno standard che definisce come le informazioni vengono scambiate tra il server Web e scripting lato client.
  • specifica CGI è attualmente mantenuto dal CGI NCSA, NCSA è definita come segue:
  • Common Gateway Interface (CGI), è un gateway per i programmi esterni con i server di informazione (come server HTTP) standard di attracco di interfaccia.
  • La versione attuale è CGI / 1.1, CGI / 1.2 versione sta avanzando.

Browser Web

Per capire meglio il concetto di CGI, facciamo click su un collegamento ipertestuale, sfogliare una pagina o un URL specifico, e vediamo cosa succede.

  • Il tuo browser collega sul server Web HTTP e richiede un URL, cioè, il nome del file.
  • Web server risolve l'URL, e trovare il nome del file. Se si trova il file richiesto, il server Web invierà il file al browser, altrimenti inviare un messaggio di errore che indica che si richiede un file sbagliato.
  • browser Web per ottenere una risposta dal server Web, e in base alla risposta ricevuta per visualizzare un file o un messaggio di errore.

Tuttavia, in modo da costruire un server HTTP, indipendentemente da quando una richiesta di directory file, il server HTTP è non invia indietro il file, ma nella forma di esecuzione del programma e l'attuazione della produzione generata viene inviato al display del browser fuori.

Common Gateway Interface (CGI), è quello di presentare una domanda (denominata programmi CGI o script CGI) per lavorare con i server Web e client interagiscono protocolli standard. Questi programmi CGI possono utilizzare Python, Perl, Shell, C o C ++, ecc per preparare.

Grafico CGI

L'illustrazione seguente mostra l'architettura di CGI:

architettura CGI

configurazione del server Web

Prima di effettuare la programmazione CGI, assicurarsi che il server Web supporta CGI, ed è stato configurato per gestire programmi CGI. Tutti i programmi CGI eseguiti dal server HTTP, devono essere directory pre-configurato. Questa directory chiamata directory CGI, per convenzione di nome / var / www / cgi-bin. Anche se il file eseguibile CGI è C ++, ma per convenzione, è l'estensione.cgi.

Per impostazione predefinita, il server Web Apache sarebbe configurato per l'esecuzione nella directory / var / www / cgi-bin nel programma CGI. Se si desidera specificare un'altra directory per eseguire script CGI, è possibile modificare la seguente sezione nel file 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>

Qui, stiamo assumendo si dispone già di un server Web e può essere eseguito con successo, è possibile eseguire tutti i programmi CGI, come Perl o Shell e simili.

Il primo programma CGI

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

Compilare il codice precedente, il file eseguibile si chiama cplusplus.cgi, e questo file viene salvato nella directory / cgi-bin / var / www. Prima di eseguire il programma CGI, si prega di utilizzare il comandochmod 755 cplusplus.cgi UNIX per cambiare la modalità di file, assicurarsi che il file è eseguibile.file eseguibile di accesso, verrà visualizzato il seguente output:

Ciao a tutti! Questo è il mio primo programma CGI

Il programma di cui sopra C ++ è un programma semplice, è scritto sul file di output STDOUT viene visualizzato sullo schermo. Qui, è da notare che la prima linea di uscitaContent-Type: text / html \ r \ n \ r \ n.Questa linea viene inviato al browser, e destinato ad essere visualizzati nel tipo di contenuto finestra del browser. È necessario comprendere i concetti di base della CGI, in modo da utilizzare per ulteriori Python per scrivere programma CGI più complessa. C ++ programma CGI può essere utilizzato con altri sistemi esterni (come RDBMS) per interagire.

informazioni di intestazione HTTP

LineaContent-type: text / html \ r \ n \ r \ n è parte integrante delle informazioni di intestazione HTTP, viene inviato al browser, al fine di comprendere meglio il contenuto della pagina.Nella forma di informazioni di intestazione HTTP è il seguente:

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

Ci sono altre importanti informazioni di intestazione HTTP, questi vengono spesso utilizzati nella programmazione 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。

Variabili CGI ambiente

Tutti i programmi CGI possono accedere alle seguenti variabili d'ambiente. Queste variabili durante la scrittura di programmi CGI giocano un ruolo molto importante.

变量名 描述
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 服务器上运行的软件的名称和版本。

Di seguito sono elencati tutti i programmi CGI variabili 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;
}

libreria C ++ CGI

In un esempio reale, è necessario eseguire molte operazioni da programmi CGI. C'è un programma progettato specificamente per la libreria CGI C ++ scritto, possiamo ftp://ftp.gnu.org/gnu/cgicc/~~V scaricare questa libreria CGI, la biblioteca e installato in conformità con le seguenti operazioni:

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

È possibile fare clic sul C ++ CGI Lib la documentazione , visualizzare documenti della biblioteca.

GET e POST metodi

Potreste aver incontrato una situazione del genere, quando si ha bisogno di passare alcune informazioni dal browser al server Web, e, infine, passati al programma CGI. In genere i browser sono due modi per utilizzare queste informazioni al server Web sono GET e POST metodi.

Utilizzare il metodo GET per passare informazioni

metodo per inviare le informazioni all'utente codificata allegata alla richiesta di pagina GET. Pagine e informazioni codificate separati dal carattere, come segue ?:

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

metodo GET è il metodo di default dal browser al trasferimento delle informazioni del server Web, si tratta di una lunga serie di stringa viene generato nella barra degli indirizzi del browser. Quando una password o altre informazioni sensibili che si passa al server, non utilizzare il metodo GET. GET metodo è limitata in termini di dimensioni, in una stringa di richiesta di trasferimento fino a 1024 caratteri.

Quando si utilizza il metodo GET è quello di utilizzare l'intestazione http QUERY_STRING per trasmettere informazioni, utilizzare la variabile d'ambiente QUERY_STRING in programmi CGI di accesso.

È possibile tenere il passo con la chiave nella URL di semplice connessione, è possibile anche utilizzare il metodo GET HTML tag <form> per trasmettere informazioni.

Semplici esempi URL: Get Method

Ecco un semplice URL, utilizzando il metodo GET per passare due valori per hello_get.py programma.

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

Gli esempi che seguono generano programmaCGI cpp_get.cgi per l'elaborazione dell'ingresso proposta dal browser web.Utilizzando la libreria C ++ CGI, è possibile accedere facilmente la trasmissione di informazioni:

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

Ora, compilare il programma sopra come segue:

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

Generare cpp_get.cgi, e metterlo nella directory CGI e tentare di accedere al seguente link:

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

Questo produce i seguenti risultati:

名:ZARA 
姓:ALI 

Esempi di forma semplice: metodo GET

Ecco un semplice esempio, utilizzando formati HTML e pulsante di invio passa i due valori. Useremo lo stesso cpp_get.cgi script CGI per elaborare l'input.

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

Ecco l'uscita effettiva del modulo, inserire il nome e il cognome, quindi fare clic sul pulsante di invio per visualizzare i risultati.

Utilizzando il metodo POST per trasmettere informazioni

Un metodo più affidabile di passare informazioni al programma CGI è il metodo POST. Questo metodo di confezionamento informazioni con il metodo GET nello stesso modo, tranne che non è il messaggio come una stringa di testo nella URL? Dopo essere passato, ma mettere in un messaggio separato sotto forma di consegna. Il messaggio viene passato al standard input in forma di script CGI.

Usiamo anche cpp_get.cgi per gestire metodo POST. Prendiamo lo stesso esempio, di passare attraverso l'uso di moduli HTML e inviare pulsante due valori, ma questa volta non stiamo usando il metodo GET, ma il metodo POST, come segue:

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

programma CGI di passare i dati alla casella

Quando è necessario selezionare più opzioni, stiamo utilizzando le caselle di controllo.

Il seguente esempio di codice HTML è un modulo con due caselle di controllo:

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

Il seguente programma C ++ genererà lo script cpp_checkbox.cgi per gestire browser web digitando la casella data.

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

Trasferire i dati al programma CGI il pulsante di opzione

Quando solo bisogno di selezionare un'opzione, usiamo pulsanti di opzione.

Il seguente esempio di codice HTML è una forma con due pulsanti di opzione:

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

Il seguente programma C ++ genererà lo script cpp_radiobutton.cgi per gestire il browser Web di ingresso tramite il pulsante di.

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

Il trasferimento dei dati ad un programma di un'area di testo CGI

programma CGI quando è necessario trasferire più righe di testo, usiamo l'elemento TEXTAREA.

Il seguente esempio di codice HTML è una forma di scatola 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>

Il seguente programma C ++ genererà lo script cpp_textarea.cgi per gestire l'input dato dal browser Web, l'area di testo.

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

Casella a discesa per passare i dati al programma CGI

Quando ci sono diverse opzioni disponibili, ma possono scegliere solo uno o due opzioni, si usa il menu a tendina.

Il seguente esempio di codice HTML è una forma con una casella a discesa:

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

Il seguente programma C ++ genererà lo script cpp_dropdown.cgi per gestire il browser Web di ingresso tramite casella a discesa dato.

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

Utilizzare cookie in CGI,

protocollo HTTP è un protocollo stateless. Ma per un sito web aziendale, ha bisogno di mantenere le informazioni di sessione tra le pagine diverse. Ad esempio, un utente dopo il completamento di molteplici passaggi fine pagina di registrazione. Tuttavia, come mantenere informazioni sessione dell'utente in ogni pagina.

In molti casi, l'uso dei cookie è quello di ricordare e tenere traccia delle informazioni per quanto riguarda le preferenze degli utenti, l'acquisto, commissione e l'altro metodo più efficace per il perseguimento di una migliore esperienza di visitatore o del sito statistiche necessarie informazioni.

Come funziona

Server sotto forma di un cookie di inviare alcuni dati al browser del visitatore. Se il browser accetta il cookie, il cookie verrà memorizzato come testo registrato sul disco rigido di un visitatore. Ora, quando i visitatori a un'altra pagina sul sito, recupera il cookie. Una volta trovato il cookie, il server saprà cosa è memorizzato.

Un cookie è un puro record di dati di testo, cinque campi a lunghezza variabile con:

  • Scadenza: biscotto data di scadenza.Se questo campo viene lasciato vuoto, cookie scadrà quando il visitatore esce dal browser.
  • Dominio: nome di dominio del sito.
  • Percorso: Impostare la directory percorso del cookie o una pagina.Se si desidera recuperare il cookie da qualsiasi directory o pagina, questo campo può essere lasciato vuoto.
  • Sicuro: Se questo campo contiene la parola "sicuro", allora il cookie possono essere recuperate attraverso un server sicuro.Se questo campo viene lasciato vuoto, che non esistono restrizioni.
  • Nome = Valore: biscotto sotto forma di coppie chiave-valore da impostare e ottenere.

impostazioni dei cookie

Inviare cookie al browser è molto semplice. Questi cookies saranno prima che il campo Content-type, e intestazioni HTTP da inviare insieme. Supponiamo di voler impostare UserID e Password per i cookie, i cookie impostati passi sono i seguenti:

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

Da questo esempio, abbiamo imparato come impostare i cookie. Usiamo l'intestazioneHTTP Set-Cookie per impostare i cookie.

Qui ci sono alcune proprietà per impostare i cookie è opzionale, come Scade, di dominio e il percorso. Vale la pena notare, i cookie vengono inviati in prima linea"Content-Type: text / html \ r \ n \ r \ nprima di essere impostato.

Compilare il programma di cui sopra che genera setcookies.cgi, e tenta di utilizzare il seguente link per impostare i cookie. Sarà istituito quattro cookie sul computer:

/cgi-bin/setcookies.cgi

Get Cookies

cookie per recuperare tutte le impostazioni sono molto semplici. cookie vengono memorizzati nel CGI variabili d'ambiente HTTP_COOKIE, e la loro forma è memorizzato come segue:

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

L'esempio seguente mostra come ottenere i cookie.

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

Ora, compilare il programma di cui sopra genera getcookies.cgi, e cercare di utilizzare il seguente link per ottenere tutti i biscotti disponibili sul computer:

/cgi-bin/getcookies.cgi

Questo produrrà un elenco che mostra tutti gli altri quattro biscotti biscotti su un set e il computer:

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

Esempi di caricamento di file

Per caricare un file, form HTML deve enctype attributo impostato sumultipart / form-data.tag input con il tipo di file creerà un pulsante "Sfoglia".

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

I risultati di questo codice è il seguente modulo:

documenti:

Nota: L'esempio precedente è stato deliberatamente disattivato nel salvati sui nostri server per caricare i file.È possibile provare il codice precedente sul server.

Di seguito sono utilizzati per elaborare ilcpp_uploadfile.cpp file di script di upload:

#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'esempio di cui sopra è quello di scrivere acout flusso, ma si può aprire il flusso di file, e il contenuto del file caricato in un file sul percorso di destinazione.