Programowanie internetowe w C ++

Co to jest CGI?

  • Common Gateway Interface (CGI) to zestaw standardów definiujących sposób wymiany informacji między serwerem WWW a niestandardowym skryptem.

  • Specyfikacje CGI są obecnie utrzymywane przez NCSA, a NCSA definiuje CGI w następujący sposób:

  • Interfejs Common Gateway Interface (CGI) jest standardem dla zewnętrznych programów bram do łączenia się z serwerami informacyjnymi, takimi jak serwery HTTP.

  • Obecna wersja to CGI / 1.1, a CGI / 1.2 jest w trakcie opracowywania.

Przeglądanie sieci

Aby zrozumieć koncepcję CGI, zobaczmy, co się dzieje, gdy klikamy hiperłącze w celu przeglądania określonej strony internetowej lub adresu URL.

  • Twoja przeglądarka kontaktuje się z serwerem HTTP i żąda adresu URL, tj. Nazwa pliku.

  • Serwer WWW przeanalizuje adres URL i poszuka nazwy pliku. Jeśli znajdzie żądany plik, serwer sieciowy wysyła ten plik z powrotem do przeglądarki, w przeciwnym razie wysyła komunikat o błędzie wskazujący, że zażądałeś niewłaściwego pliku.

  • Przeglądarka internetowa pobiera odpowiedź z serwera WWW i wyświetla otrzymany plik lub komunikat o błędzie na podstawie otrzymanej odpowiedzi.

Możliwe jest jednak skonfigurowanie serwera HTTP w taki sposób, aby za każdym razem, gdy zażądano pliku w określonym katalogu, plik ten nie był odsyłany; zamiast tego jest wykonywany jako program, a dane wyjściowe programu są wysyłane z powrotem do przeglądarki w celu wyświetlenia.

Common Gateway Interface (CGI) to standardowy protokół umożliwiający aplikacjom (zwanym programami CGI lub skryptami CGI) interakcję z serwerami sieci Web i klientami. Te programy CGI mogą być napisane w Pythonie, PERL, Shell, C lub C ++ itp.

Diagram architektury CGI

Poniższy prosty program przedstawia prostą architekturę CGI -

Konfiguracja serwera WWW

Przed przystąpieniem do programowania CGI upewnij się, że serwer WWW obsługuje CGI i jest skonfigurowany do obsługi programów CGI. Wszystkie programy CGI, które mają być wykonywane przez serwer HTTP, są przechowywane we wstępnie skonfigurowanym katalogu. Ten katalog nazywa się katalogiem CGI i zgodnie z konwencją nosi nazwę / var / www / cgi-bin. Zgodnie z konwencją pliki CGI będą miały rozszerzenie jako.cgi, chociaż są wykonywalne w C ++.

Domyślnie serwer sieciowy Apache jest skonfigurowany do uruchamiania programów CGI w / var / www / cgi-bin. Jeśli chcesz określić inny katalog do uruchamiania skryptów CGI, możesz 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ładam, że masz poprawnie uruchomiony serwer sieciowy i możesz uruchomić dowolny inny program CGI, taki jak Perl lub Shell itp.

Pierwszy program CGI

Rozważ następującą zawartość programu w języku 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;
}

Skompiluj powyższy kod i nazwij plik wykonywalny jako cplusplus.cgi. Ten plik jest przechowywany w katalogu / var / www / cgi-bin i ma następującą zawartość. Przed uruchomieniem programu CGI upewnij się, że masz zmianę trybu pliku za pomocąchmod 755 cplusplus.cgi Polecenie UNIX, aby uczynić plik wykonywalnym.

Mój pierwszy program CGI

Powyższy program w C ++ jest prostym programem, który zapisuje swoje wyjście do pliku STDOUT, np. Screen. Dostępna jest jedna ważna i dodatkowa funkcja, czyli drukowanie w pierwszej liniiContent-type:text/html\r\n\r\n. Ta linia jest wysyłana z powrotem do przeglądarki i określa typ zawartości, która ma być wyświetlana na ekranie przeglądarki. Teraz musisz zrozumieć podstawową koncepcję CGI i możesz pisać wiele skomplikowanych programów CGI w języku Python. Program C ++ CGI może współdziałać z dowolnym innym systemem zewnętrznym, takim jak RDBMS, w celu wymiany informacji.

Nagłówek HTTP

Linia Content-type:text/html\r\n\r\nto część nagłówka HTTP, która jest wysyłana do przeglądarki w celu zrozumienia treści. Cały nagłówek HTTP będzie miał następującą postać -

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

Istnieje kilka innych ważnych nagłówków HTTP, których będziesz często używać w programowaniu CGI.

Sr.No Nagłówek i opis
1

Content-type:

Ciąg MIME określający format zwracanego pliku. Przykład: Typ treści: tekst / html.

2

Expires: Date

Data utraty informacji. Powinno to być używane przez przeglądarkę, aby zdecydować, kiedy strona wymaga odświeżenia. Prawidłowy ciąg daty powinien mieć format 01 Jan 1998 12:00:00 GMT.

3

Location: URL

Adres URL, który powinien zostać zwrócony zamiast żądanego adresu URL. Możesz użyć tego pola, aby przekierować żądanie do dowolnego pliku.

4

Last-modified: Date

Data ostatniej modyfikacji zasobu.

5

Content-length: N

Długość zwracanych danych w bajtach. Przeglądarka używa tej wartości do raportowania szacowanego czasu pobierania pliku.

6

Set-Cookie: String

Ustaw plik cookie przekazany przez ciąg .

Zmienne środowiskowe CGI

Cały program CGI będzie miał dostęp do następujących zmiennych środowiskowych. Te zmienne odgrywają ważną rolę podczas pisania dowolnego programu CGI.

Sr.No Nazwa i opis zmiennej
1

CONTENT_TYPE

Typ danych treści używany, gdy klient wysyła załączoną zawartość do serwera. Na przykład przesyłanie plików itp.

2

CONTENT_LENGTH

Długość informacji o zapytaniu, które są dostępne tylko dla żądań POST.

3

HTTP_COOKIE

Zwraca ustawione pliki cookie w postaci pary klucz-wartość.

4

HTTP_USER_AGENT

Pole nagłówka żądania agenta użytkownika zawiera informacje o kliencie użytkownika, który wysłał żądanie. Jest to nazwa przeglądarki internetowej.

5

PATH_INFO

Ścieżka do skryptu CGI.

6

QUERY_STRING

Informacje zakodowane w adresie URL, które są wysyłane z żądaniem metody GET.

7

REMOTE_ADDR

Adres IP zdalnego hosta wysyłającego żądanie. Może to być przydatne do logowania lub do celów uwierzytelniania.

8

REMOTE_HOST

W pełni kwalifikowana nazwa hosta wysyłającego żądanie. Jeśli te informacje nie są dostępne, można użyć REMOTE_ADDR do uzyskania adresu IR.

9

REQUEST_METHOD

Metoda użyta do wysłania żądania. Najpopularniejsze metody to GET i POST.

10

SCRIPT_FILENAME

Pełna ścieżka do skryptu CGI.

11

SCRIPT_NAME

Nazwa skryptu CGI.

12

SERVER_NAME

Nazwa hosta lub adres IP serwera.

13

SERVER_SOFTWARE

Nazwa i wersja oprogramowania, na którym działa serwer.

Oto mały program CGI do wyszczególnienia wszystkich zmiennych 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;
}

Biblioteka C ++ CGI

Aby uzyskać prawdziwe przykłady, musiałbyś wykonać wiele operacji w programie CGI. Istnieje biblioteka CGI napisana dla programu C ++, którą można pobrać z ftp://ftp.gnu.org/gnu/cgicc/ i postępować zgodnie z instrukcjami, aby zainstalować bibliotekę -

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

Możesz sprawdzić powiązaną dokumentację dostępną w 'C ++ CGI Lib Documentation .

Metody GET i POST

Musiałeś spotkać się z wieloma sytuacjami, w których musisz przekazać pewne informacje z przeglądarki na serwer WWW, a ostatecznie do programu CGI. Przeglądarka najczęściej używa dwóch metod przekazywania tych informacji do serwera WWW. Te metody to metoda GET i metoda POST.

Przekazywanie informacji metodą GET

Metoda GET wysyła zakodowane informacje o użytkowniku dołączone do żądania strony. Strona i zakodowane informacje są oddzielone znakiem? znak w następujący sposób -

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

Metoda GET jest domyślną metodą przekazywania informacji z przeglądarki do serwera WWW i tworzy długi ciąg, który pojawia się w polu Lokalizacja: przeglądarki. Nigdy nie używaj metody GET, jeśli masz hasło lub inne poufne informacje do przekazania na serwer. Metoda GET ma ograniczenie rozmiaru i można przekazać do 1024 znaków w ciągu żądania.

W przypadku korzystania z metody GET informacje są przekazywane przy użyciu nagłówka http QUERY_STRING i będą dostępne w programie CGI za pośrednictwem zmiennej środowiskowej QUERY_STRING.

Możesz przekazywać informacje, po prostu łącząc pary klucz i wartość wraz z dowolnym adresem URL lub możesz użyć tagów HTML <FORM>, aby przekazać informacje metodą GET.

Prosty przykład adresu URL: metoda pobierania

Oto prosty adres URL, który przekazuje dwie wartości do programu hello_get.py przy użyciu metody GET.

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

Poniżej znajduje się program do wygenerowania cpp_get.cgiProgram CGI do obsługi danych wejściowych podawanych przez przeglądarkę internetową. Będziemy używać biblioteki C ++ CGI, która bardzo ułatwia dostęp do przekazywanych 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>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;
}

Teraz skompiluj powyższy program w następujący sposób -

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

Wygeneruj cpp_get.cgi i umieść go w katalogu CGI i spróbuj uzyskać dostęp za pomocą następującego linku -

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

Dałoby to następujący wynik -

First name: ZARA 
Last name: ALI

Prosty przykład FORMULARZA: GET Method

Oto prosty przykład, który przekazuje dwie wartości za pomocą HTML FORM i przycisku przesyłania. Będziemy używać tego samego skryptu CGI cpp_get.cgi do obsługi tego wejścia.

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

Oto rzeczywisty wynik powyższego formularza. Wpisz Imię i Nazwisko, a następnie kliknij przycisk Prześlij, aby zobaczyć wynik.

Przekazywanie informacji metodą POST

Generalnie bardziej niezawodną metodą przekazywania informacji do programu CGI jest metoda POST. Spowoduje to pakowanie informacji dokładnie w taki sam sposób, jak metody GET, ale zamiast wysyłać je jako ciąg tekstowy po znaku? w adresie URL wysyła go jako oddzielną wiadomość. Ta wiadomość pojawia się w skrypcie CGI w postaci standardowego wejścia.

Ten sam program cpp_get.cgi obsługuje również metodę POST. Weźmy ten sam przykład co powyżej, który przekazuje dwie wartości za pomocą HTML FORM i przycisku przesyłania, ale tym razem z metodą POST w następujący sposób -

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

Oto rzeczywisty wynik powyższego formularza. Wpisz Imię i Nazwisko, a następnie kliknij przycisk Prześlij, aby zobaczyć wynik.

Przekazywanie danych pola wyboru do programu CGI

Pola wyboru są używane, gdy wymagane jest wybranie więcej niż jednej opcji.

Oto przykładowy kod HTML formularza z dwoma polami wyboru -

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

Wynikiem tego kodu jest następująca postać -

Poniżej znajduje się program w C ++, który wygeneruje skrypt cpp_checkbox.cgi do obsługi danych wprowadzanych przez przeglądarkę internetową za pomocą przycisku checkbox.

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

Przekazywanie danych przycisku radiowego do programu CGI

Przyciski radiowe są używane, gdy wymagana jest tylko jedna opcja.

Oto przykład kodu HTML dla formularza z dwoma przyciskami opcji -

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

Wynikiem tego kodu jest następująca postać -

Poniżej znajduje się program C ++, który wygeneruje skrypt cpp_radiobutton.cgi do obsługi danych wprowadzanych przez przeglądarkę internetową za pomocą przycisków opcji.

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

Przekazywanie danych obszaru tekstowego do programu CGI

Element TEXTAREA jest używany, gdy tekst wielowierszowy ma zostać przesłany do programu CGI.

Oto przykładowy kod HTML dla formularza z polem 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>

Wynikiem tego kodu jest następująca postać -

Poniżej znajduje się program w C ++, który wygeneruje skrypt cpp_textarea.cgi do obsługi danych wprowadzanych przez przeglądarkę internetową poprzez obszar tekstowy.

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

Przekazywanie danych z rozwijanej skrzynki do programu CGI

Rozwijane okno jest używane, gdy mamy wiele dostępnych opcji, ale tylko jedna lub dwie zostaną wybrane.

Oto przykładowy kod HTML dla formularza z jednym rozwijanym oknem -

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

Wynikiem tego kodu jest następująca postać -

Poniżej znajduje się program w C ++, który wygeneruje skrypt cpp_dropdown.cgi do obsługi danych wejściowych podawanych przez przeglądarkę internetową za pośrednictwem rozwijanej listy.

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

Korzystanie z plików cookie w CGI

Protokół HTTP jest protokołem bezstanowym. Jednak w przypadku komercyjnej witryny internetowej wymagane jest przechowywanie informacji o sesjach między różnymi stronami. Na przykład rejestracja jednego użytkownika kończy się po wypełnieniu wielu stron. Ale jak zachować informacje o sesji użytkownika na wszystkich stronach internetowych.

W wielu sytuacjach używanie plików cookie jest najskuteczniejszą metodą zapamiętywania i śledzenia preferencji, zakupów, prowizji i innych informacji wymaganych dla lepszych wrażeń odwiedzających lub statystyk witryny.

Jak to działa

Twój serwer wysyła pewne dane do przeglądarki odwiedzającego w formie pliku cookie. Przeglądarka może zaakceptować plik cookie. Jeśli tak, jest przechowywany jako zwykły zapis tekstowy na dysku twardym gościa. Teraz, gdy użytkownik przejdzie na inną stronę w Twojej witrynie, plik cookie jest dostępny do pobrania. Po odzyskaniu serwer wie / pamięta, co zostało zapisane.

Pliki cookie to zapis danych w postaci zwykłego tekstu składający się z 5 pól o zmiennej długości -

  • Expires- Pokazuje datę wygaśnięcia pliku cookie. Jeśli jest puste, plik cookie wygaśnie, gdy odwiedzający zamknie przeglądarkę.

  • Domain - Wyświetla nazwę domeny Twojej witryny.

  • Path- Pokazuje ścieżkę do katalogu lub strony internetowej, która ustawiła plik cookie. To może być puste, jeśli chcesz pobrać plik cookie z dowolnego katalogu lub strony.

  • Secure- Jeśli to pole zawiera słowo „bezpieczny”, plik cookie można pobrać tylko z bezpiecznego serwera. Jeśli to pole jest puste, takie ograniczenie nie istnieje.

  • Name = Value - Pliki cookie są ustawiane i pobierane w postaci par klucza i wartości.

Konfiguracja plików cookie

Wysyłanie plików cookie do przeglądarki jest bardzo łatwe. Te pliki cookie będą wysyłane wraz z nagłówkiem HTTP przed zapisaniem typu zawartości. Zakładając, że chcesz ustawić identyfikator użytkownika i hasło jako pliki cookie. Więc ustawienia plików cookie będą wykonywane w następujący sposób

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

Na podstawie tego przykładu musisz wiedzieć, jak ustawić pliki cookie. UżywamySet-Cookie Nagłówek HTTP do ustawiania plików cookie.

W tym przypadku opcjonalne jest ustawienie atrybutów plików cookie, takich jak Wygasa, Domena i Ścieżka. Warto zauważyć, że pliki cookie są ustawiane przed wysłaniem magicznej linii"Content-type:text/html\r\n\r\n.

Skompiluj powyższy program, aby utworzyć setcookies.cgi, i spróbuj ustawić pliki cookie za pomocą poniższego linku. Ustawi cztery pliki cookie na Twoim komputerze -

/cgi-bin/setcookies.cgi

Pobieranie plików cookie

Pobranie wszystkich ustawionych plików cookie jest łatwe. Pliki cookie są przechowywane w zmiennej środowiskowej CGI HTTP_COOKIE i będą miały następującą postać.

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

Oto przykład pobierania plików 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>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;
}

Teraz skompiluj powyższy program, aby utworzyć getcookies.cgi i spróbuj uzyskać listę wszystkich plików cookie dostępnych na twoim komputerze -

/cgi-bin/getcookies.cgi

Spowoduje to wyświetlenie listy wszystkich czterech plików cookie ustawionych w poprzedniej sekcji i wszystkich innych plików cookie ustawionych na Twoim komputerze -

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

Przykład przesyłania plików

Aby przesłać plik, formularz HTML musi mieć atrybut enctype ustawiony na multipart/form-data. Znacznik 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>File: <input type = "file" name = "userfile" /></p>
         <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

Wynikiem tego kodu jest następująca postać -

Note- Powyższy przykład został celowo wyłączony, aby uniemożliwić ludziom przesyłanie plików na nasz serwer. Ale możesz wypróbować powyższy kod na swoim serwerze.

Oto scenariusz cpp_uploadfile.cpp do obsługi przesyłania plików -

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

Powyższy przykład służy do pisania treści pod adresem cout stream, ale możesz otworzyć strumień plików i zapisać zawartość przesłanego pliku w pliku w wybranej lokalizacji.

Mam nadzieję, że podobał Ci się ten samouczek. Jeśli tak, prześlij nam swoją opinię.