Latest web development tutorials

C ++ Programowanie WWW

Co to jest CGI?

  • Common Gateway Interface (CGI), to standard, który definiuje sposób wymiany informacji pomiędzy serwerem WWW i skryptów po stronie klienta.
  • Szczegółowy CGI jest obecnie utrzymywane przez CGI NCSA NCSA jest zdefiniowany w następujący sposób:
  • Common Gateway Interface (CGI), jest bramą dla programów zewnętrznych z serwerów informacyjnych (takich jak serwer HTTP) standardu interfejsu dokowania.
  • Obecna wersja jest CGI / 1.1, CGI / 1.2 wersja jest na zaawansowanym etapie.

Przeglądarka internetowa

Aby lepiej zrozumieć pojęcie CGI, niech kliknąć na hiperłącze, przeglądać konkretną stronę lub URL, i zobaczyć, co się dzieje.

  • Twoja przeglądarka łączy się na serwerze WWW HTTP i zwraca adres URL, czyli nazwę pliku.
  • Serwer WWW rozwiązuje URL i odnaleźć nazwę pliku. Jeśli okaże się żądany plik, serwer WWW wysyła plik do przeglądarki, w przeciwnym razie wysyła komunikat o błędzie informujący, że żądasz błędnego pliku.
  • przeglądarkę internetową, aby uzyskać odpowiedź od serwera sieci Web, a na podstawie otrzymanych odpowiedzi, aby wyświetlić plik lub komunikat o błędzie.

Jednakże, w taki sposób, aby przyczyniać się do serwera HTTP, niezależnie od tego, kiedy poprosić o katalog plików, serwer HTTP nie jest odesłanie plik, ale w formie realizacji programu i jego realizacji wyjściu generowany jest odsyłany do ekranu przeglądarki na zewnątrz.

Common Gateway Interface (CGI), to złożyć wniosek (zwane programy CGI lub skryptów CGI) do pracy z serwerami WWW i interakcji klientów standardowych protokołów. Te programy CGI mogą korzystać Python, Perl, Shell, C lub C ++, itd przygotować.

Wykres CGI

Poniższy rysunek przedstawia architekturę CGI:

architektura CGI

Konfiguracja serwera WWW

Przed dokonaniem programowania CGI, upewnij się, że serwer WWW obsługuje CGI i został skonfigurowany do obsługi programów CGI. Wszystkie programy CGI wykonywane przez serwer HTTP, muszą być wstępnie skonfigurowany katalog. Ten katalog o nazwie katalogu CGI, zgodnie z konwencją o nazwie / var / www / cgi-bin. Chociaż CGI plik wykonywalny jest C ++, ale zgodnie z przyjętą konwencją, to.cgi.

Domyślnie serwer Apache zostanie skonfigurowany do pracy w / var / www / cgi-bin w programie CGI. Jeśli chcesz określić inny katalog do uruchamiania skryptów CGI, można zmodyfikować następującą sekcję w pliku 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>

Tutaj zakładamy, że masz już serwer WWW i mogą być uruchamiane z powodzeniem można uruchomić żadnych programów CGI, takich jak Perl lub Shell i tym podobne.

Pierwszy program CGI

Rozważmy następujący program w 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;
}

Skompilować powyższy kod, plik wykonywalny nazywa cplusplus.cgi i ten plik jest zapisywany w katalogu / var / www katalogu / cgi-bin. Przed uruchomieniem programu CGI, należy użyć poleceniachmod 755 cplusplus.cgi UNIX, aby zmienić tryb pliku, upewnij się, że plik jest wykonywalny.Dostęp do pliku wykonywalnego, pojawi się następujący komunikat:

Hello World! To jest mój pierwszy program CGI

Powyższy program w C ++ to prosty program, to jest napisane w pliku wyjściowym STDOUT jest wyświetlany na ekranie. Tu warto zauważyć, że pierwsza linia wyjściaContent-Type: text / html \ r \ n \ r \ n.Linia ta jest wysyłana do przeglądarki, i przeznaczone do wyświetlania w typie zawartości okna przeglądarki. Musisz zrozumieć podstawowe pojęcia CGI, tak aby dalej używać Pythona napisać bardziej złożony program CGI. Program C ++ CGI może być stosowany w przypadku innych systemów zewnętrznych (takich jak serwer bazy danych) do interakcji.

informacje nagłówka HTTP

LiniaContent-Type: text / html \ r \ n \ r \ n jest integralną częścią informacji nagłówka HTTP, jest on wysyłany do przeglądarki, aby lepiej zrozumieć zawartość strony.W postaci nagłówka informacji HTTP jest następujący:

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

Istnieją inne ważne informacje nagłówka HTTP, będą często używane w programowaniu 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。

Zmienne środowiskowe CGI

Wszystkie programy CGI mogą uzyskać dostęp do następujących zmiennych środowiskowych. Te zmienne podczas pisania programów CGI odgrywają bardzo ważną rolę.

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

Poniżej znajduje się lista wszystkich programów CGI zmienne 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;
}

biblioteka C ++ CGI

W prawdziwej przykład, trzeba wykonać wiele operacji przez programy CGI. Jest to program zaprojektowany specjalnie dla C ++ pisemnej bibliotece CGI, możemy ftp://ftp.gnu.org/gnu/cgicc/~~V pobierz to biblioteka CGI, bibliotekę i zainstalowane zgodnie z następującymi etapami:

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

Można kliknąć na C ++ CGI Lib dokumentacji , przeglądanie dokumentów bibliotecznych.

GET i POST metody

Można napotkać taką sytuację, gdy trzeba przekazać pewne informacje z przeglądarki do serwera sieci Web, a ostatecznie przeszedł do programu CGI. Zazwyczaj przeglądarki są dwa sposoby, aby wykorzystać te informacje do serwera sieci Web są metody GET i POST.

Za pomocą metody GET do przekazywania informacji

GET metodę wysyłania informacji o użytkowniku zakodowany dołączone do żądania strony. Strony i zakodowane informacje oddzielone charakteru, co następuje ?:

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

Metoda GET jest domyślna metoda z przeglądarki do przekazywania informacji serwer WWW, jest to długi ciąg ciąg jest generowany w pasku adresu przeglądarki. Kiedy hasło lub inne poufne informacje, które mijają się z serwerem, nie należy korzystać z metody GET. GET metoda jest ograniczona pod względem wielkości w ciągu żądanie transferu do 1024 znaków.

Podczas korzystania z metody GET jest użycie nagłówka HTTP QUERY_STRING do przekazywania informacji, należy użyć zmiennej środowiskowej QUERY_STRING w programach CGI dostępu.

można nadążyć z kluczem w adresie URL prostego połączenia można również użyć metody GET HTML <form> tag do przekazywania informacji.

Proste URL Przykłady: Get Method

Oto prosty URL, używając metody GET przejść dwie wartości hello_get.py program.

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

Poniższe przykłady generowaniacpp_get.cgi program CGIdo przetwarzania wejścia podany przez przeglądarkę WWW. Przy użyciu biblioteki C ++ CGI, można łatwo uzyskać dostęp do przekazu informacji:

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

Teraz skompilować powyższy program w następujący sposób:

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

Generowanie cpp_get.cgi, i umieścić go w katalogu CGI i próby uzyskania dostępu do poniższego linku:

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

To daje następujące wyniki:

名:ZARA 
姓:ALI 

Przykłady prostej formie: Get metody

Oto prosty przykład, za pomocą formularzy HTML i przedłożyć przycisku przechodzi dwie wartości. Będziemy korzystać z tego samego skryptu CGI cpp_get.cgi przetwarzać dane wejściowe.

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

Oto rzeczywiste wyjście formie, wprowadź imię i nazwisko, a następnie kliknąć na przycisk by zobaczyć wyniki.

Stosując metodę POST do przesyłania informacji

Bardziej niezawodna metoda przekazywania informacji do programu CGI jest metodą POST. Metoda ta informacja pakowania metodą GET w ten sam sposób, z tym że nie jest to wiadomość jako ciąg tekstowy w adresie URL? Po zostać przekazane, ale umieścić go w oddzielnym komunikacie w formularzu dostawy. Wiadomość jest przekazywana do standardowego wejścia w postaci skryptu CGI.

Używamy również cpp_get.cgi obsłużyć metody POST. Weźmy ten sam przykład, aby przejść przez wykorzystanie formularzy HTML i przesłać przycisk dwie wartości, ale tym razem nie używamy metody GET, ale metody POST, co następuje:

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

Program CGI przekazać dane do skrzynki

Kiedy trzeba wybrać kilka opcji, jesteśmy za pomocą pól wyboru.

Poniższy przykład kodu HTML jest formularz z dwoma wyboru:

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

Poniższy program w C ++ generuje skrypt cpp_checkbox.cgi do obsługi przeglądarki internetowej, wpisując w pole podane.

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

Transfer danych do programu CGI opcję

Gdy tylko trzeba wybrać opcję, używamy przycisków radiowych.

Poniższy przykład kodu HTML jest formą pomocą dwóch przycisków radiowych:

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

Poniższy program w C ++ generuje skrypt cpp_radiobutton.cgi obsługiwać przeglądarkę internetową wejściowy za pomocą przycisku radiowego.

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

Transfer danych do programu CGI obszaru tekstu

Program CGI, gdy trzeba przenieść wiele wierszy tekstu, używamy elementem tekstowym.

Poniższy przykład kodu HTML jest formą z pudełkiem 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>

Poniższy program w C ++ generuje skrypt cpp_textarea.cgi obsługiwać wejście podany przez przeglądarkę internetową, w polu tekstowym.

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

Rozwijane pole do przekazywania danych do programu CGI

Gdy istnieje wiele dostępnych opcji, ale może wybrać tylko jedną lub dwie opcje, używamy listy rozwijanej.

Poniższy przykład kodu HTML jest formą z rozwijanej listy:

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

Poniższy program w C ++ generuje skrypt cpp_dropdown.cgi obsługiwać przeglądarkę internetową wejściowy za pośrednictwem listy rozwijanej danym.

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

Używamy cookies w CGI

Protokół HTTP jest protokołem. Ale na stronie internetowej firmy, musi przechowywać informacje o sesji między różnymi stronami. Na przykład, użytkownik po zakończeniu kilku etapów końca strony rejestracji. Jednak, jak zachować informacje o sesji użytkownika na każdej stronie.

W wielu przypadkach stosowanie cookies jest, aby pamiętać i śledzenie informacji na temat preferencji użytkownika, kupno, Komisja i inne najbardziej efektywnej metody dla osiągnięcia lepszego doświadczenia użytkownik lub miejscu statystyk wymaganych informacji.

Jak to działa?

Serwer w postaci pliku cookie, aby wysłać jakieś dane do przeglądarki odwiedzającego. Jeśli przeglądarka akceptuje pliki cookie, cookie będą przechowywane w postaci zwykłego tekstu zapisanego na dysku twardym odwiedzającego. Teraz, kiedy odwiedzających do innej strony na stronie, pobiera cookie. Po znalezieniu pliku cookie, serwer będzie wiedział, co jest zapisane.

Cookie to czyste rekordy danych tekstów, pięć pól o zmiennej długości z:

  • Wygasa: ciasteczka datę ważności.Jeśli to pole pozostanie puste, cookie wygasa, gdy użytkownik zamyka przeglądarkę.
  • Domena: nazwa domeny witryny.
  • Path: Ustawia ścieżkę katalogu plików cookie lub stronę.Jeśli chcesz pobrać plik cookie z dowolnego katalogu lub strony, to pole może pozostać puste.
  • Bezpieczeństwo: Jeśli to pole zawiera słowo "bezpieczne", a następnie cookie mogą być pobierane za pośrednictwem bezpiecznego serwera.Jeśli to pole pozostanie puste, to istnieją żadne ograniczenia.
  • Nazwa = Wartość cookie w postaci par klucz-wartość do ustawienia i inne.

Ustawianie Cookies

Wyślij ciasteczka do przeglądarki jest bardzo prosta. Pliki te będą przed pola Content-Type, a nagłówki HTTP należy przesłać razem. Załóżmy, że chcemy ustawić identyfikatora użytkownika i hasła dla plików cookie, ustawianie ciasteczek kroki są następujące:

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

Z tego przykładu, dowiedzieliśmy się, jak ustawić pliki cookies. Używamy nagłówekHTTP Set-Cookie na ustawianie ciasteczek.

Oto niektóre właściwości na ustawianie ciasteczek jest opcjonalne, takie jak wygaśnięcia domeny i ścieżki. Warto zauważyć, ciasteczka są wysyłane w wierszu"Content-Type: text / html \ r \ n \ r \ nprzed ustawiony.

Skompilować powyższy program, który generuje setcookies.cgi i spróbuj kliknąć na poniższy link na ustawianie ciasteczek. Zostanie powołana cztery cookie na komputerze:

/cgi-bin/setcookies.cgi

Uzyskaj Cookies

ciasteczka, aby pobrać wszystkie ustawienia są bardzo proste. ciastka są przechowywane w CGI zmienne środowiska HTTP_COOKIE, a ich forma jest zapisany w następujący sposób:

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

Poniższy przykład pokazuje, jak uzyskać pliki 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;
}

Teraz skompilować powyższy program generuje getcookies.cgi i spróbuj kliknąć na poniższy link, aby uzyskać wszystkie dostępne pliki cookie na komputerze:

/cgi-bin/getcookies.cgi

To będzie produkować listę, która pokazuje wszystkie pozostałe cztery Cookies Cookies na zestawie z komputerem:

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

Przykłady wysyłania plików

Aby przesłać plik, formularz HTML musi enctype atrybut ustawiony namultipart / form-data.tag wejściowy z typem pliku utworzy przycisk "Przeglądaj".

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

Wyniki tego kodu jest następujący formularz:

dokumenty:

Uwaga: Powyższy przykład został celowo wyłączony w zapisywane na naszych serwerach, aby przesłać pliki.Można spróbować powyższy kod na swoim serwerze.

Stosowane są do przetwarzaniacpp_uploadfile.cpp skryptu wysyłania pliku następuje:

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

Powyższy przykład jest napisać do strumieniacout, ale można otworzyć strumień pliku i zawartość przesłanego pliku w pliku w lokalizacji docelowej.