Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Webprogrammierung

Was ist CGI?

Web-Browsing

Um das Konzept von CGI zu verstehen, sehen wir uns an, was passiert, wenn wir auf einen Hyperlink klicken, um eine bestimmte Webseite oder URL zu durchsuchen.

Es ist jedoch möglich, den HTTP-Server so einzurichten, dass immer dann, wenn eine Datei in einem bestimmten Verzeichnis angefordert wird, diese Datei nicht zurückgesendet wird; stattdessen wird es als Programm ausgeführt und die erzeugte Ausgabe des Programms wird zur Anzeige an Ihren Browser zurückgesendet.

Das Common Gateway Interface (CGI) ist ein Standardprotokoll, mit dem Anwendungen (CGI-Programme oder CGI-Skripte genannt) mit Webservern und Clients interagieren können. Diese CGI-Programme können in Python, PERL, Shell, C oder C++ usw. geschrieben sein.

CGI-Architekturdiagramm

Das folgende einfache Programm zeigt eine einfache Architektur von CGI −

Webserver-Konfiguration

Bevor Sie mit der CGI-Programmierung fortfahren, vergewissern Sie sich, dass Ihr Webserver CGI unterstützt und für die Verarbeitung von CGI-Programmen konfiguriert ist. Alle vom HTTP-Server auszuführenden CGI-Programme werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird als CGI-Verzeichnis bezeichnet und gemäß Konvention als /var/www/cgi-bin bezeichnet. Konventionsgemäß haben CGI-Dateien die Erweiterung .cgi , obwohl sie in C++ ausführbar sind.

Standardmäßig ist Apache Web Server so konfiguriert, dass CGI-Programme in /var/www/cgi-bin ausgeführt werden. Wenn Sie ein anderes Verzeichnis zum Ausführen Ihrer CGI-Skripte angeben möchten, können Sie den folgenden Abschnitt in der Datei httpd.conf ändern −

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>
 
<Directory "/var/www/cgi-bin">
   Options All
</Directory>

Hier gehe ich davon aus, dass Sie den Webserver erfolgreich eingerichtet und ausgeführt haben und in der Lage sind, jedes andere CGI-Programm wie Perl oder Shell etc. auszuführen.

Erstes CGI-Programm

Betrachten Sie den folgenden Inhalt des C++-Programms −

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

Kompilieren Sie den obigen Code und benennen Sie die ausführbare Datei als cplusplus.cgi. Diese Datei wird im Verzeichnis /var/www/cgi-bin gespeichert und hat folgenden Inhalt. Bevor Sie Ihr CGI-Programm ausführen, vergewissern Sie sich, dass Sie den Änderungsmodus der Datei mit chmod 755 cplusplus.cgi haben UNIX-Befehl, um die Datei ausführbar zu machen.

Mein erstes CGI-Programm

Das obige C++-Programm ist ein einfaches Programm, das seine Ausgabe in die STDOUT-Datei, d. h. den Bildschirm, schreibt. Es gibt eine wichtige und zusätzliche Funktion, nämlich das Drucken der ersten Zeile Content-type:text/html\r\n\r\n . Diese Zeile wird an den Browser zurückgesendet und gibt den Inhaltstyp an, der auf dem Browserbildschirm angezeigt werden soll. Jetzt müssen Sie das Grundkonzept von CGI verstanden haben und können viele komplizierte CGI-Programme mit Python schreiben. Ein C++-CGI-Programm kann mit jedem anderen externen System wie RDBMS interagieren, um Informationen auszutauschen.

HTTP-Header

Die Zeile Content-type:text/html\r\n\r\n ist ein Teil des HTTP-Headers, der an den Browser gesendet wird, um den Inhalt zu verstehen. Der gesamte HTTP-Header hat folgende Form:−

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

Es gibt einige andere wichtige HTTP-Header, die Sie häufig in Ihrer CGI-Programmierung verwenden werden.

Sr.No Kopfzeile &Beschreibung
1

Inhaltstyp:

Eine MIME-Zeichenfolge, die das Format der zurückgegebenen Datei definiert. Beispiel ist Content-type:text/html.

2

Läuft ab:Datum

Das Datum, an dem die Informationen ungültig werden. Dies sollte vom Browser verwendet werden, um zu entscheiden, wann eine Seite aktualisiert werden muss. Eine gültige Datumszeichenfolge sollte das Format 01. Januar 1998 12:00:00 GMT haben.

3

Ort:URL

Die URL, die anstelle der angeforderten URL zurückgegeben werden soll. Sie können dieses Feld verwenden, um eine Anfrage an eine beliebige Datei umzuleiten.

4

Zuletzt geändert:Datum

Das Datum der letzten Änderung der Ressource.

5

Inhaltslänge:N

Die Länge der zurückgegebenen Daten in Byte. Der Browser verwendet diesen Wert, um die geschätzte Downloadzeit für eine Datei zu melden.

6

Set-Cookie:String

Setzt das Cookie, das durch den String geleitet wird .

CGI-Umgebungsvariablen

Alle CGI-Programme haben Zugriff auf die folgenden Umgebungsvariablen. Diese Variablen spielen eine wichtige Rolle beim Schreiben von CGI-Programmen.

Sr.No Variablenname und -beschreibung
1

CONTENT_TYPE

Der Datentyp des Inhalts, der verwendet wird, wenn der Client angehängte Inhalte an den Server sendet. Zum Beispiel Datei-Upload etc.

2

CONTENT_LENGTH

Die Länge der Abfrageinformationen, die nur für POST-Anforderungen verfügbar sind.

3

HTTP_COOKIE

Gibt die gesetzten Cookies in Form eines Schlüssel-Wert-Paares zurück.

4

HTTP_USER_AGENT

Das User-Agent-Request-Header-Feld enthält Informationen über den User-Agent, von dem die Anfrage stammt. Es ist ein Name des Webbrowsers.

5

PATH_INFO

Der Pfad für das CGI-Skript.

6

QUERY_STRING

Die URL-codierten Informationen, die mit der GET-Methodenanforderung gesendet werden.

7

REMOTE_ADDR

Die IP-Adresse des Remote-Hosts, der die Anfrage stellt. Dies kann für Protokollierungs- oder Authentifizierungszwecke nützlich sein.

8

REMOTE_HOST

Der vollständig qualifizierte Name des Hosts, der die Anfrage stellt. Wenn diese Informationen nicht verfügbar sind, kann REMOTE_ADDR verwendet werden, um die IR-Adresse zu erhalten.

9

REQUEST_METHOD

Die für die Anforderung verwendete Methode. Die gebräuchlichsten Methoden sind GET und POST.

10

SCRIPT_FILENAME

Der vollständige Pfad zum CGI-Skript.

11

SCRIPT_NAME

Der Name des CGI-Skripts.

12

SERVER_NAME

Der Hostname oder die IP-Adresse des Servers.

13

SERVER_SOFTWARE

Der Name und die Version der Software, die der Server ausführt.

Hier ist ein kleines CGI-Programm, um alle CGI-Variablen aufzulisten.

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

C++ CGI-Bibliothek

Für echte Beispiele müssten Sie viele Operationen von Ihrem CGI-Programm ausführen. Es gibt eine für C++ geschriebene CGI-Bibliothek, die Sie von ftp://ftp.gnu.org/gnu/cgicc/ herunterladen und den Schritten zur Installation der Bibliothek folgen können −

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

Sie können die zugehörige Dokumentation unter „C++ CGI Lib Documentation.

einsehen

GET- und POST-Methoden

Sie müssen auf viele Situationen gestoßen sein, in denen Sie Informationen von Ihrem Browser an den Webserver und schließlich an Ihr CGI-Programm übergeben müssen. Am häufigsten verwendet der Browser zwei Methoden, um diese Informationen an den Webserver zu übergeben. Diese Methoden sind die GET-Methode und die POST-Methode.

Übergabe von Informationen mit der GET-Methode

Die GET-Methode sendet die codierten Benutzerinformationen an die Seitenanforderung angehängt. Die Seite und die verschlüsselten Informationen werden durch das ? getrennt. Zeichen wie folgt −

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

Die GET-Methode ist die Standardmethode, um Informationen vom Browser an den Webserver zu übergeben, und sie erzeugt eine lange Zeichenfolge, die im Feld „Location:“ Ihres Browsers angezeigt wird. Verwenden Sie niemals die GET-Methode, wenn Sie Passwörter oder andere vertrauliche Informationen an den Server weitergeben müssen. Die GET-Methode hat eine Größenbeschränkung und Sie können bis zu 1024 Zeichen in einer Anforderungszeichenfolge übergeben.

Bei Verwendung der GET-Methode werden Informationen über den HTTP-Header QUERY_STRING übergeben und sind in Ihrem CGI-Programm über die Umgebungsvariable QUERY_STRING zugänglich.

Sie können Informationen weitergeben, indem Sie einfach Schlüssel-Wert-Paare zusammen mit einer beliebigen URL verketten, oder Sie können HTML-

-Tags verwenden, um Informationen mit der GET-Methode weiterzugeben.

Einfaches URL-Beispiel:Get-Methode

Hier ist eine einfache URL, die mithilfe der GET-Methode zwei Werte an das Programm hello_get.py übergibt.

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

Unten ist ein Programm zum Generieren von cpp_get.cgi CGI-Programm zur Verarbeitung von Eingaben durch den Webbrowser. Wir werden die C++ CGI-Bibliothek verwenden, die es sehr einfach macht, auf weitergegebene Informationen zuzugreifen −

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

Kompilieren Sie nun das obige Programm wie folgt −

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

Generieren Sie cpp_get.cgi und legen Sie es in Ihr CGI-Verzeichnis und versuchen Sie, über den folgenden Link darauf zuzugreifen −

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

Dies würde das folgende Ergebnis erzeugen −

First name: ZARA 
Last name: ALI 

Einfaches FORM-Beispiel:GET-Methode

Hier ist ein einfaches Beispiel, das zwei Werte mit HTML FORM und der Schaltfläche "Senden" übergibt. Wir werden dasselbe CGI-Skript cpp_get.cgi verwenden, um diese Eingabe zu verarbeiten.

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

Hier ist die eigentliche Ausgabe des obigen Formulars. Sie geben den Vor- und Nachnamen ein und klicken dann auf die Schaltfläche „Senden“, um das Ergebnis zu sehen.

Übergabe von Informationen mit der POST-Methode

Eine im Allgemeinen zuverlässigere Methode zum Übergeben von Informationen an ein CGI-Programm ist die POST-Methode. Dadurch werden die Informationen genau so verpackt wie bei GET-Methoden, aber anstatt sie als Textzeichenfolge nach einem ? in der URL sendet es es als separate Nachricht. Diese Nachricht kommt in Form der Standardeingabe in das CGI-Skript.

Dasselbe cpp_get.cgi-Programm wird auch die POST-Methode handhaben. Nehmen wir das gleiche Beispiel wie oben, das zwei Werte unter Verwendung von HTML FORM und der Submit-Schaltfläche übergibt, diesmal jedoch mit der POST-Methode wie folgt:−

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

Hier ist die eigentliche Ausgabe des obigen Formulars. Sie geben den Vor- und Nachnamen ein und klicken dann auf die Schaltfläche „Senden“, um das Ergebnis zu sehen.

Checkbox-Daten an CGI-Programm übergeben

Kontrollkästchen werden verwendet, wenn mehr als eine Option ausgewählt werden muss.

Hier ist ein Beispiel-HTML-Code für ein Formular mit zwei Kontrollkästchen −

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

Das Ergebnis dieses Codes ist die folgende Form −

Unten ist ein C++-Programm, das das Skript cpp_checkbox.cgi generiert, um Eingaben zu verarbeiten, die vom Webbrowser über die Schaltfläche "Kontrollkästchen" eingegeben werden.

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

Optionsfelddaten an CGI-Programm übergeben

Optionsfelder werden verwendet, wenn nur eine Option ausgewählt werden muss.

Hier ist ein HTML-Beispielcode für ein Formular mit zwei Optionsfeldern −

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

Das Ergebnis dieses Codes ist die folgende Form −

Unten ist ein C++-Programm, das ein cpp_radiobutton.cgi-Skript generiert, um Eingaben zu verarbeiten, die vom Webbrowser über Optionsfelder gegeben werden.

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

Textbereichsdaten an CGI-Programm übergeben

Das TEXTAREA-Element wird verwendet, wenn mehrzeiliger Text an das CGI-Programm übergeben werden muss.

Hier ist ein HTML-Beispielcode für ein Formular mit einem TEXTAREA-Feld −

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

Das Ergebnis dieses Codes ist die folgende Form −

Unten ist ein C++-Programm, das ein cpp_textarea.cgi-Skript generiert, um Eingaben zu verarbeiten, die vom Webbrowser über den Textbereich gegeben werden.

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

Dropdown-Box-Daten an das CGI-Programm übergeben

Dropdown-Box wird verwendet, wenn wir viele Optionen zur Verfügung haben, aber nur eine oder zwei ausgewählt werden.

Hier ist ein HTML-Beispielcode für ein Formular mit einem Dropdown-Feld −

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

Das Ergebnis dieses Codes ist die folgende Form −

Unten ist ein C++-Programm, das ein cpp_dropdown.cgi-Skript generiert, um Eingaben zu verarbeiten, die vom Webbrowser über das Dropdown-Feld eingegeben werden.

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

Cookies in CGI verwenden

Das HTTP-Protokoll ist ein zustandsloses Protokoll. Für eine kommerzielle Website ist es jedoch erforderlich, Sitzungsinformationen zwischen verschiedenen Seiten zu verwalten. Zum Beispiel endet eine Benutzerregistrierung nach Abschluss vieler Seiten. Aber wie man die Sitzungsinformationen des Benutzers auf allen Webseiten verwaltet.

In vielen Situationen ist die Verwendung von Cookies die effizienteste Methode, um Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen, die für ein besseres Besuchererlebnis oder Website-Statistiken erforderlich sind.

Wie es funktioniert

Ihr Server sendet einige Daten in Form eines Cookies an den Browser des Besuchers. Der Browser kann das Cookie akzeptieren. Wenn dies der Fall ist, wird es als Klartext-Datensatz auf der Festplatte des Besuchers gespeichert. Wenn der Besucher nun auf einer anderen Seite Ihrer Website ankommt, steht das Cookie zum Abruf bereit. Nach dem Abrufen weiß/merkt sich Ihr Server, was gespeichert wurde.

Cookies sind ein Klartext-Datensatz aus 5 Feldern variabler Länge −

  • Läuft ab − Dies zeigt das Ablaufdatum des Cookies. Wenn dies leer ist, läuft das Cookie ab, wenn der Besucher den Browser verlässt.

  • Domäne − Dies zeigt den Domainnamen Ihrer Website.

  • Pfad − Dies zeigt den Pfad zu dem Verzeichnis oder der Webseite, die das Cookie gesetzt hat. Dies kann leer sein, wenn Sie das Cookie aus einem beliebigen Verzeichnis oder einer beliebigen Seite abrufen möchten.

  • Sicher − Wenn dieses Feld das Wort „secure“ enthält, darf das Cookie nur mit einem sicheren Server abgerufen werden. Wenn dieses Feld leer ist, besteht keine solche Einschränkung.

  • Name =Wert − Cookies werden in Form von Schlüssel-Wert-Paaren gesetzt und abgerufen.

Einrichten von Cookies

Es ist sehr einfach, Cookies an den Browser zu senden. Diese Cookies werden zusammen mit dem HTTP-Header gesendet, bevor der Inhaltstyp abgelegt wird. Angenommen, Sie möchten Benutzer-ID und Passwort als Cookies festlegen. Die Cookie-Einstellung erfolgt also wie folgt

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

Anhand dieses Beispiels müssen Sie verstanden haben, wie Cookies gesetzt werden. Wir verwenden Set-Cookie HTTP-Header zum Setzen von Cookies.

Hier ist es optional, Cookies-Attribute wie Expires, Domain und Path festzulegen. Es ist bemerkenswert, dass Cookies gesetzt werden, bevor die magische Zeile "Content-type:text/html\r\n\r\n gesendet wird .

Kompilieren Sie das obige Programm, um setcookies.cgi zu erstellen, und versuchen Sie, Cookies über den folgenden Link zu setzen. Es werden vier Cookies auf Ihrem Computer gesetzt −

/cgi-bin/setcookies.cgi

Abrufen von Cookies

Es ist einfach, alle gesetzten Cookies abzurufen. Cookies werden in der CGI-Umgebungsvariable HTTP_COOKIE gespeichert und haben folgende Form.

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

Hier ist ein Beispiel zum Abrufen von Cookies.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main () {
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // get environment variables
   const CgiEnvironment& env = cgi.getEnvironment();

   for( cci = env.getCookieList().begin();
   cci != env.getCookieList().end(); 
   ++cci ) {
      cout << "<tr><td>" << cci->getName() << "</td><td>";
      cout << cci->getValue();                                 
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Kompilieren Sie nun das obige Programm, um getcookies.cgi zu erstellen, und versuchen Sie, eine Liste aller auf Ihrem Computer verfügbaren Cookies zu erhalten −

/cgi-bin/getcookies.cgi

Dadurch wird eine Liste aller vier Cookies erstellt, die im vorherigen Abschnitt gesetzt wurden, sowie aller anderen Cookies, die auf Ihrem Computer gesetzt wurden −

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

Beispiel für Datei-Upload

Um eine Datei hochzuladen, muss das enctype-Attribut des HTML-Formulars auf multipart/form-data gesetzt sein . Das Eingabe-Tag mit dem Dateityp erstellt eine Schaltfläche "Durchsuchen".

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

Das Ergebnis dieses Codes ist die folgende Form −

Hinweis − Das obige Beispiel wurde absichtlich deaktiviert, um Leute daran zu hindern, Dateien auf unseren Server hochzuladen. Aber Sie können den obigen Code mit Ihrem Server ausprobieren.

Hier ist das Skript cpp_uploadfile.cpp um den Datei-Upload zu handhaben −

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

Das obige Beispiel dient zum Schreiben von Inhalten bei cout Stream, aber Sie können Ihren Dateistream öffnen und den Inhalt der hochgeladenen Datei in einer Datei am gewünschten Ort speichern.

Ich hoffe, Ihnen hat dieses Tutorial gefallen. Wenn ja, senden Sie uns bitte Ihr Feedback.


C Sprache

  1. Namespaces in der C#-Programmierung
  2. C++-Operatoren
  3. C++-Kommentare
  4. Übergeben eines Arrays an eine Funktion in der C++-Programmierung
  5. C-Tutorial
  6. C++-Übersicht
  7. C++ Konstanten/Literale
  8. Operatoren in C++
  9. Zahlen in C++
  10. C++-Referenzen