Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ webprogrammering

Wat is CGI?

  • De Common Gateway Interface, of CGI, is een reeks standaarden die bepalen hoe informatie wordt uitgewisseld tussen de webserver en een aangepast script.

  • De CGI-specificaties worden momenteel onderhouden door de NCSA en NCSA definieert CGI als volgt −

  • De Common Gateway Interface, of CGI, is een standaard voor externe gateway-programma's om te communiceren met informatieservers zoals HTTP-servers.

  • De huidige versie is CGI/1.1 en CGI/1.2 is in ontwikkeling.

Browsen op het web

Laten we, om het concept van CGI te begrijpen, eens kijken wat er gebeurt als we op een hyperlink klikken om door een bepaalde webpagina of URL te bladeren.

  • Uw browser neemt contact op met de HTTP-webserver en vraagt ​​om de URL, dwz. bestandsnaam.

  • Web Server zal de URL ontleden en naar de bestandsnaam zoeken. Als het het gevraagde bestand vindt, stuurt de webserver dat bestand terug naar de browser, anders stuurt het een foutmelding om aan te geven dat je een verkeerd bestand hebt aangevraagd.

  • Webbrowser neemt reactie van de webserver en geeft het ontvangen bestand of foutbericht weer op basis van de ontvangen reactie.

Het is echter mogelijk om de HTTP-server zo in te stellen dat wanneer een bestand in een bepaalde directory wordt opgevraagd, dat bestand niet wordt teruggestuurd; in plaats daarvan wordt het uitgevoerd als een programma en wordt de geproduceerde uitvoer van het programma teruggestuurd naar uw browser om weer te geven.

De Common Gateway Interface (CGI) is een standaardprotocol waarmee toepassingen (CGI-programma's of CGI-scripts) kunnen communiceren met webservers en met clients. Deze CGI-programma's kunnen zijn geschreven in Python, PERL, Shell, C of C++ enz.

CGI-architectuurdiagram

Het volgende eenvoudige programma toont een eenvoudige architectuur van CGI −

Webserverconfiguratie

Voordat u doorgaat met CGI-programmering, moet u ervoor zorgen dat uw webserver CGI ondersteunt en is geconfigureerd om CGI-programma's te verwerken. Alle CGI-programma's die door de HTTP-server moeten worden uitgevoerd, worden bewaard in een vooraf geconfigureerde map. Deze map wordt CGI-map genoemd en volgens afspraak wordt deze /var/www/cgi-bin genoemd. Volgens afspraak hebben CGI-bestanden de extensie .cgi , hoewel ze uitvoerbaar zijn in C++.

Standaard is Apache Web Server geconfigureerd om CGI-programma's uit te voeren in /var/www/cgi-bin. Als u een andere map wilt specificeren om uw CGI-scripts uit te voeren, kunt u de volgende sectie in het httpd.conf-bestand wijzigen −

<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 ga ik ervan uit dat u de webserver succesvol hebt geïnstalleerd en dat u elk ander CGI-programma zoals Perl of Shell enz. kunt uitvoeren.

Eerste CGI-programma

Overweeg de volgende inhoud van het C++-programma −

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

Compileer bovenstaande code en noem het uitvoerbare bestand cplusplus.cgi. Dit bestand wordt bewaard in de map /var/www/cgi-bin en heeft de volgende inhoud. Voordat u uw CGI-programma uitvoert, moet u ervoor zorgen dat u de bestandsmodus wijzigt met chmod 755 cplusplus.cgi UNIX-opdracht om het bestand uitvoerbaar te maken.

Mijn eerste CGI-programma

Het bovenstaande C ++ -programma is een eenvoudig programma dat de uitvoer naar het STDOUT-bestand, d.w.z. het scherm, schrijft. Er is een belangrijke en extra functie beschikbaar, namelijk afdrukken op de eerste regel Content-type:text/html\r\n\r\n . Deze regel wordt teruggestuurd naar de browser en specificeert het inhoudstype dat op het browserscherm moet worden weergegeven. Nu moet je het basisconcept van CGI hebben begrepen en kun je veel gecompliceerde CGI-programma's schrijven met Python. Een C++ CGI-programma kan communiceren met elk ander extern systeem, zoals RDBMS, om informatie uit te wisselen.

HTTP-koptekst

De regel Content-type:text/html\r\n\r\n is een onderdeel van de HTTP-header, die naar de browser wordt gestuurd om de inhoud te begrijpen. Alle HTTP-headers hebben de volgende vorm −

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

Er zijn weinig andere belangrijke HTTP-headers die u vaak zult gebruiken in uw CGI-programmering.

Zr.Nee Koptekst en beschrijving
1

Inhoudstype:

Een MIME-tekenreeks die de indeling definieert van het bestand dat wordt geretourneerd. Voorbeeld is Content-type:text/html.

2

Verloopt:datum

De datum waarop de informatie ongeldig wordt. Dit moet door de browser worden gebruikt om te beslissen wanneer een pagina moet worden vernieuwd. Een geldige datumreeks moet de indeling hebben 01 Jan 1998 12:00:00 GMT.

3

Locatie:URL

De URL die moet worden geretourneerd in plaats van de aangevraagde URL. Je kunt dit bestand gebruiken om een ​​verzoek om te leiden naar een willekeurig bestand.

4

Laatst gewijzigd:datum

De datum van de laatste wijziging van de bron.

5

Inhoudslengte:N

De lengte, in bytes, van de gegevens die worden geretourneerd. De browser gebruikt deze waarde om de geschatte downloadtijd voor een bestand te rapporteren.

6

Set-Cookie:String

Stel de cookie in die door de string gaat .

CGI-omgevingsvariabelen

Alle CGI-programma's hebben toegang tot de volgende omgevingsvariabelen. Deze variabelen spelen een belangrijke rol bij het schrijven van een CGI-programma.

Zr.Nee Naam en beschrijving van variabele
1

CONTENT_TYPE

Het gegevenstype van de inhoud dat wordt gebruikt wanneer de client bijgevoegde inhoud naar de server verzendt. Bijvoorbeeld bestandsupload etc.

2

CONTENT_LENGTH

De lengte van de query-informatie die alleen beschikbaar is voor POST-verzoeken.

3

HTTP_COOKIE

Retourneert de ingestelde cookies in de vorm van een sleutel- en waardepaar.

4

HTTP_USER_AGENT

Het veld User-Agent-aanvraagheader bevat informatie over de user-agent die de aanvraag heeft ingediend. Het is een naam van de webbrowser.

5

PATH_INFO

Het pad voor het CGI-script.

6

QUERY_STRING

De URL-gecodeerde informatie die wordt verzonden met het verzoek van de GET-methode.

7

REMOTE_ADDR

Het IP-adres van de externe host die het verzoek doet. Dit kan handig zijn voor loggen of voor authenticatiedoeleinden.

8

REMOTE_HOST

De volledig gekwalificeerde naam van de host die het verzoek doet. Als deze informatie niet beschikbaar is, kan REMOTE_ADDR worden gebruikt om een ​​IR-adres te krijgen.

9

REQUEST_METHOD

De methode die is gebruikt om het verzoek in te dienen. De meest gebruikelijke methoden zijn GET en POST.

10

SCRIPT_FILENAME

Het volledige pad naar het CGI-script.

11

SCRIPT_NAME

De naam van het CGI-script.

12

SERVER_NAME

De hostnaam of het IP-adres van de server.

13

SERVER_SOFTWARE

De naam en versie van de software waarop de server draait.

Hier is een klein CGI-programma om alle CGI-variabelen op een rij te zetten.

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

Voor echte voorbeelden zou u veel bewerkingen moeten uitvoeren door uw CGI-programma. Er is een CGI-bibliotheek geschreven voor het C++-programma die u kunt downloaden van ftp://ftp.gnu.org/gnu/cgicc/ en volg de stappen om de bibliotheek te installeren −

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

U kunt gerelateerde documentatie raadplegen die beschikbaar is op 'C++ CGI Lib Documentation.

GET- en POST-methoden

U bent vast veel situaties tegengekomen waarin u wat informatie van uw browser naar de webserver en uiteindelijk naar uw CGI-programma moet doorgeven. Meestal gebruikt de browser twee methoden om deze informatie door te geven aan de webserver. Deze methoden zijn GET-methode en POST-methode.

Informatie doorgeven met GET-methode

De GET-methode verzendt de gecodeerde gebruikersinformatie die aan het paginaverzoek is toegevoegd. De pagina en de gecodeerde informatie worden gescheiden door de ? teken als volgt −

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

De GET-methode is de standaardmethode om informatie van browser naar webserver door te geven en produceert een lange reeks die in het vak Location:box van uw browser verschijnt. Gebruik nooit de GET-methode als u een wachtwoord of andere gevoelige informatie aan de server moet doorgeven. De GET-methode heeft een maximale grootte en u kunt tot 1024 tekens in een verzoekreeks doorgeven.

Wanneer u de GET-methode gebruikt, wordt informatie doorgegeven met behulp van de QUERY_STRING http-header en is deze toegankelijk in uw CGI-programma via de omgevingsvariabele QUERY_STRING.

U kunt informatie doorgeven door eenvoudig sleutel- en waardeparen samen te voegen met elke URL of u kunt HTML

-tags gebruiken om informatie door te geven met behulp van de GET-methode.

Eenvoudig URL-voorbeeld:methode ophalen

Hier is een eenvoudige URL die twee waarden doorgeeft aan het hello_get.py-programma met behulp van de GET-methode.

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

Hieronder is een programma om cpp_get.cgi . te genereren CGI-programma om invoer door de webbrowser te verwerken. We gaan de C++ CGI-bibliotheek gebruiken, waardoor het heel gemakkelijk is om toegang te krijgen tot doorgegeven informatie −

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

Stel nu het bovenstaande programma als volgt samen −

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

Genereer cpp_get.cgi en plaats het in uw CGI-directory en probeer toegang te krijgen via de volgende link −

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

Dit zou het volgende resultaat opleveren −

First name: ZARA 
Last name: ALI 

Eenvoudig VORM Voorbeeld:GET-methode

Hier is een eenvoudig voorbeeld dat twee waarden doorgeeft met behulp van HTML FORM en de knop Verzenden. We gaan hetzelfde CGI-script cpp_get.cgi gebruiken om deze invoer af te handelen.

<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 is de daadwerkelijke uitvoer van het bovenstaande formulier. U voert de voor- en achternaam in en klikt vervolgens op de verzendknop om het resultaat te zien.

Informatie doorgeven met POST-methode

Een over het algemeen betrouwbaardere methode om informatie door te geven aan een CGI-programma is de POST-methode. Dit verpakt de informatie op precies dezelfde manier als GET-methoden, maar in plaats van het als een tekenreeks te verzenden na een ? in de URL verzendt het het als een afzonderlijk bericht. Dit bericht komt in het CGI-script binnen in de vorm van de standaardinvoer.

Hetzelfde cpp_get.cgi-programma zal ook de POST-methode verwerken. Laten we hetzelfde voorbeeld nemen als hierboven, dat twee waarden doorgeeft met behulp van HTML FORM en de knop Verzenden, maar deze keer met de POST-methode als volgt −

<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 is de daadwerkelijke uitvoer van het bovenstaande formulier. U voert de voor- en achternaam in en klikt vervolgens op de verzendknop om het resultaat te zien.

Checkbox-gegevens doorgeven aan CGI-programma

Selectievakjes worden gebruikt wanneer er meer dan één optie moet worden geselecteerd.

Hier is een voorbeeld HTML-code voor een formulier met twee selectievakjes −

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

Het resultaat van deze code is de volgende vorm −

Hieronder staat het C++-programma, dat het cpp_checkbox.cgi-script genereert om de invoer van de webbrowser via de checkbox-knop af te handelen.

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

Gegevens van keuzerondjes doorgeven aan CGI-programma

Keuzerondjes worden gebruikt als er maar één optie hoeft te worden geselecteerd.

Hier is een voorbeeld HTML-code voor een formulier met twee keuzerondjes −

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

Het resultaat van deze code is de volgende vorm −

Hieronder staat het C++-programma, dat het cpp_radiobutton.cgi-script genereert om de invoer van de webbrowser via keuzerondjes af te handelen.

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

Tekstgebiedgegevens doorgeven aan CGI-programma

Het TEXTAREA-element wordt gebruikt wanneer tekst met meerdere regels moet worden doorgegeven aan het CGI-programma.

Hier is een voorbeeld HTML-code voor een formulier met een TEXTAREA-vak −

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

Het resultaat van deze code is de volgende vorm −

Hieronder staat het C++-programma, dat het cpp_textarea.cgi-script genereert om de invoer van de webbrowser via het tekstgebied af te handelen.

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

Vervolgkeuzelijstgegevens doorgeven aan CGI-programma

Vervolgkeuzelijst wordt gebruikt wanneer we veel opties beschikbaar hebben, maar slechts een of twee worden geselecteerd.

Hier is een voorbeeld HTML-code voor een formulier met een drop-down box −

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

Het resultaat van deze code is de volgende vorm −

Hieronder staat het C++-programma, dat het cpp_dropdown.cgi-script genereert om de invoer van de webbrowser via de vervolgkeuzelijst af te handelen.

#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 gebruiken in CGI

HTTP-protocol is een staatloos protocol. Maar voor een commerciële website is het vereist om sessie-informatie tussen verschillende pagina's bij te houden. Een gebruikersregistratie eindigt bijvoorbeeld na het invullen van vele pagina's. Maar hoe u de sessie-informatie van gebruikers op alle webpagina's kunt bijhouden.

In veel situaties is het gebruik van cookies de meest efficiënte methode om voorkeuren, aankopen, commissies en andere informatie te onthouden en bij te houden die nodig is voor een betere bezoekerservaring of sitestatistieken.

Hoe het werkt

Uw server stuurt enkele gegevens naar de browser van de bezoeker in de vorm van een cookie. De browser kan de cookie accepteren. Als dit het geval is, wordt het opgeslagen als een tekst zonder opmaak op de harde schijf van de bezoeker. Wanneer de bezoeker nu op een andere pagina op uw site terechtkomt, kan de cookie worden opgehaald. Eenmaal opgehaald, weet/onthoudt uw server wat er is opgeslagen.

Cookies zijn een gegevensrecord in platte tekst van 5 velden met variabele lengte −

  • Verloopt − Dit toont de datum waarop de cookie vervalt. Als dit leeg is, verloopt de cookie wanneer de bezoeker de browser afsluit.

  • Domein − Dit toont de domeinnaam van uw site.

  • Pad − Dit toont het pad naar de map of webpagina die de cookie heeft geplaatst. Dit mag leeg zijn als u de cookie uit een map of pagina wilt ophalen.

  • Beveiligd − Als dit veld het woord "secure" bevat, mag de cookie alleen worden opgehaald met een beveiligde server. Als dit veld leeg is, bestaat een dergelijke beperking niet.

  • Naam =Waarde − Cookies worden ingesteld en opgehaald in de vorm van sleutel- en waardeparen.

Cookies instellen

Het is heel eenvoudig om cookies naar de browser te sturen. Deze cookies worden samen met de HTTP-header verzonden voordat het inhoudstype wordt opgeslagen. Ervan uitgaande dat u gebruikers-ID en wachtwoord als cookies wilt instellen. Het instellen van cookies wordt dus als volgt gedaan

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

Uit dit voorbeeld moet u hebben begrepen hoe u cookies instelt. We gebruiken Set-Cookie HTTP-header om cookies in te stellen.

Hier is het optioneel om cookies-attributen in te stellen, zoals Verloopt, Domein en Pad. Het is opmerkelijk dat cookies worden ingesteld voordat de magische regel "Content-type:text/html\r\n\r\n wordt verzonden .

Compileer bovenstaand programma om setcookies.cgi te produceren, en probeer cookies in te stellen via de volgende link. Er worden vier cookies op uw computer geplaatst −

/cgi-bin/setcookies.cgi

Cookies ophalen

Het is eenvoudig om alle ingestelde cookies op te halen. Cookies worden opgeslagen in de CGI-omgevingsvariabele HTTP_COOKIE en hebben de volgende vorm.

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

Hier is een voorbeeld van hoe u cookies kunt ophalen.

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

Compileer nu bovenstaand programma om getcookies.cgi te produceren, en probeer een lijst te krijgen van alle cookies die op uw computer beschikbaar zijn −

/cgi-bin/getcookies.cgi

Dit geeft een lijst met alle vier de cookies die in het vorige gedeelte zijn ingesteld en alle andere cookies die op uw computer zijn ingesteld −

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

Voorbeeld van bestandsupload

Om een ​​bestand te uploaden moet het HTML-formulier het kenmerk enctype hebben ingesteld op multipart/form-data . De invoertag met het bestandstype maakt een knop "Bladeren" aan.

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

Het resultaat van deze code is de volgende vorm −

Opmerking − Bovenstaand voorbeeld is opzettelijk uitgeschakeld om te voorkomen dat mensen bestanden uploaden naar onze server. Maar je kunt bovenstaande code proberen met je server.

Hier is het script cpp_uploadfile.cpp bestandsupload afhandelen −

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

Het bovenstaande voorbeeld is voor het schrijven van inhoud op cout stream, maar u kunt uw bestandsstream openen en de inhoud van het geüploade bestand opslaan in een bestand op de gewenste locatie.

Ik hoop dat je genoten hebt van deze tutorial. Zo ja, stuur ons dan uw feedback.


C Taal

  1. Naamruimten in C#-programmering
  2. C++-operators
  3. C++ Opmerkingen
  4. Array doorgeven aan een functie in C++-programmering
  5. C Zelfstudie
  6. C++-overzicht
  7. C++-constanten/letters
  8. Operatoren in C++
  9. Getallen in C++
  10. C++-referenties
  11. C++-sjablonen