Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Pemrograman Web C++

Apa itu CGI?

Penjelajahan Web

Untuk memahami konsep CGI, mari kita lihat apa yang terjadi ketika kita mengklik hyperlink untuk menjelajahi halaman web atau URL tertentu.

Namun, dimungkinkan untuk mengatur server HTTP sedemikian rupa sehingga setiap kali file di direktori tertentu diminta, file itu tidak dikirim kembali; alih-alih dijalankan sebagai sebuah program, dan keluaran yang dihasilkan dari program tersebut dikirim kembali ke browser Anda untuk ditampilkan.

Common Gateway Interface (CGI) adalah protokol standar untuk mengaktifkan aplikasi (disebut program CGI atau skrip CGI) untuk berinteraksi dengan server Web dan dengan klien. Program CGI ini dapat ditulis dengan Python, PERL, Shell, C atau C++ dll.

Diagram Arsitektur CGI

Program sederhana berikut menunjukkan arsitektur sederhana CGI

Konfigurasi Server Web

Sebelum Anda melanjutkan dengan Pemrograman CGI, pastikan Server Web Anda mendukung CGI dan dikonfigurasi untuk menangani Program CGI. Semua Program CGI yang akan dijalankan oleh server HTTP disimpan dalam direktori yang telah dikonfigurasi sebelumnya. Direktori ini disebut direktori CGI dan menurut konvensi dinamai /var/www/cgi-bin. Berdasarkan konvensi, file CGI akan memiliki ekstensi sebagai .cgi , meskipun C++ dapat dieksekusi.

Secara default, Apache Web Server dikonfigurasi untuk menjalankan program CGI di /var/www/cgi-bin. Jika Anda ingin menentukan direktori lain untuk menjalankan skrip CGI Anda, Anda dapat memodifikasi bagian berikut di file httpd.conf −

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

Di sini, saya berasumsi bahwa Anda memiliki Server Web dan berjalan dengan sukses dan Anda dapat menjalankan program CGI lainnya seperti Perl atau Shell dll.

Program CGI Pertama

Perhatikan konten Program C++ berikut

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

Kompilasi kode di atas dan beri nama executable sebagai cplusplus.cgi. File ini disimpan di direktori /var/www/cgi-bin dan memiliki konten berikut. Sebelum menjalankan program CGI pastikan Anda telah mengubah mode file menggunakan chmod 755 cplusplus.cgi Perintah UNIX untuk membuat file dapat dieksekusi.

Program CGI Pertama Saya

Program C++ di atas adalah program sederhana yang menulis outputnya pada file STDOUT yaitu layar. Ada satu fitur penting dan tambahan yang tersedia yaitu pencetakan baris pertama Content-type:text/html\r\n\r\n . Baris ini dikirim kembali ke browser dan menentukan tipe konten yang akan ditampilkan di layar browser. Sekarang Anda pasti sudah memahami konsep dasar CGI dan Anda bisa menulis banyak program CGI yang rumit dengan menggunakan Python. Program C++ CGI dapat berinteraksi dengan sistem eksternal lainnya, seperti RDBMS, untuk bertukar informasi.

Judul HTTP

Baris Content-type:text/html\r\n\r\n adalah bagian dari header HTTP, yang dikirim ke browser untuk memahami konten. Semua header HTTP akan dalam bentuk berikut

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

Ada beberapa header HTTP penting lainnya, yang akan sering Anda gunakan dalam Pemrograman CGI Anda.

No.No Header &Deskripsi
1

Jenis konten:

String MIME yang menentukan format file yang dikembalikan. Contohnya adalah Content-type:text/html.

2

Kedaluwarsa:Tanggal

Tanggal informasi menjadi tidak valid. Ini harus digunakan oleh browser untuk memutuskan kapan halaman perlu di-refresh. String tanggal yang valid harus dalam format 01 Jan 1998 12:00:00 GMT.

3

Lokasi:URL

URL yang harus dikembalikan, bukan URL yang diminta. Anda dapat menggunakan file ini untuk mengarahkan permintaan ke file apa pun.

4

Terakhir diubah:Tanggal

Tanggal modifikasi terakhir sumber daya.

5

Panjang konten:N

Panjang, dalam byte, dari data yang dikembalikan. Browser menggunakan nilai ini untuk melaporkan perkiraan waktu pengunduhan untuk sebuah file.

6

Set-Cookie:String

Atur cookie yang melewati string .

Variabel Lingkungan CGI

Semua program CGI akan memiliki akses ke variabel lingkungan berikut. Variabel-variabel ini memainkan peran penting saat menulis program CGI apa pun.

No.No Nama &Deskripsi Variabel
1

CONTENT_TYPE

Tipe data konten, yang digunakan saat klien mengirim konten yang dilampirkan ke server. Misalnya upload file dll.

2

CONTENT_LENGTH

Panjang informasi kueri yang tersedia hanya untuk permintaan POST.

3

HTTP_COOKIE

Mengembalikan cookie yang disetel dalam bentuk pasangan kunci &nilai.

4

HTTP_USER_AGENT

Bidang header permintaan Agen Pengguna berisi informasi tentang agen pengguna yang membuat permintaan. Ini adalah nama browser web.

5

PATH_INFO

Jalur untuk skrip CGI.

6

QUERY_STRING

Informasi yang disandikan URL yang dikirim dengan permintaan metode GET.

7

REMOTE_ADDR

Alamat IP dari host jarak jauh yang membuat permintaan. Ini dapat berguna untuk logging atau untuk tujuan otentikasi.

8

REMOTE_HOST

Nama host yang sepenuhnya memenuhi syarat yang membuat permintaan. Jika informasi ini tidak tersedia maka REMOTE_ADDR dapat digunakan untuk mendapatkan alamat IR.

9

REQUEST_METHOD

Metode yang digunakan untuk membuat permintaan. Metode yang paling umum adalah GET dan POST.

10

SCRIPT_FILENAME

Jalur lengkap ke skrip CGI.

11

SCRIPT_NAME

Nama skrip CGI.

12

SERVER_NAME

Nama host atau Alamat IP server.

13

SERVER_SOFTWARE

Nama dan versi perangkat lunak yang dijalankan server.

Berikut adalah program CGI kecil untuk membuat daftar semua variabel 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;
}

Perpustakaan C++ CGI

Untuk contoh nyata, Anda perlu melakukan banyak operasi dengan program CGI Anda. Ada pustaka CGI yang ditulis untuk program C++ yang dapat Anda unduh dari ftp://ftp.gnu.org/gnu/cgicc/ dan ikuti langkah-langkah untuk menginstal pustaka −

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

Anda dapat memeriksa dokumentasi terkait yang tersedia di ‘C++ CGI Lib Documentation.

Metode DAPATKAN dan POSTING

Anda pasti telah menemukan banyak situasi ketika Anda harus meneruskan beberapa informasi dari browser Anda ke server web dan akhirnya ke Program CGI Anda. Paling sering browser menggunakan dua metode untuk menyampaikan informasi ini ke server web. Metode ini adalah Metode GET dan Metode POST.

Melewati Informasi Menggunakan Metode GET

Metode GET mengirimkan informasi pengguna yang disandikan yang ditambahkan ke permintaan halaman. Halaman dan informasi yang disandikan dipisahkan oleh ? karakter sebagai berikut

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

Metode GET adalah metode default untuk meneruskan informasi dari browser ke server web dan menghasilkan string panjang yang muncul di kotak Location:browser Anda. Jangan pernah menggunakan metode GET jika Anda memiliki kata sandi atau informasi sensitif lainnya untuk diteruskan ke server. Metode GET memiliki batasan ukuran dan Anda dapat meneruskan hingga 1024 karakter dalam string permintaan.

Saat menggunakan metode GET, informasi diteruskan menggunakan header http QUERY_STRING dan akan dapat diakses di Program CGI Anda melalui variabel lingkungan QUERY_STRING.

Anda dapat meneruskan informasi hanya dengan menggabungkan pasangan kunci dan nilai bersama dengan URL apa pun atau Anda dapat menggunakan tag HTML

untuk meneruskan informasi menggunakan metode GET.

Contoh URL Sederhana:Dapatkan Metode

Berikut adalah URL sederhana yang akan meneruskan dua nilai ke program hello_get.py menggunakan metode GET.

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

Di bawah ini adalah program untuk menghasilkan cpp_get.cgi Program CGI untuk menangani input yang diberikan oleh web browser. Kami akan menggunakan pustaka C++ CGI yang membuatnya sangat mudah untuk mengakses informasi yang diteruskan −

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

Sekarang, kompilasi program di atas sebagai berikut

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

Buat cpp_get.cgi dan letakkan di direktori CGI Anda dan coba akses menggunakan tautan berikut −

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

Ini akan menghasilkan hasil berikut

First name: ZARA 
Last name: ALI 

Contoh FORMULIR Sederhana:Metode GET

Berikut adalah contoh sederhana yang melewati dua nilai menggunakan HTML FORM dan tombol submit. Kami akan menggunakan skrip CGI yang sama cpp_get.cgi untuk menangani input ini.

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

Berikut adalah output aktual dari formulir di atas. Anda memasukkan Nama Depan dan Belakang, lalu klik tombol kirim untuk melihat hasilnya.

Menyampaikan Informasi Menggunakan Metode POST

Metode yang umumnya lebih dapat diandalkan untuk menyampaikan informasi ke program CGI adalah metode POST. Ini mengemas informasi dengan cara yang persis sama seperti metode GET, tetapi alih-alih mengirimkannya sebagai string teks setelah ? di URL ia mengirimkannya sebagai pesan terpisah. Pesan ini masuk ke dalam skrip CGI dalam bentuk input standar.

Program cpp_get.cgi yang sama akan menangani metode POST juga. Mari kita ambil contoh yang sama seperti di atas, yang melewati dua nilai menggunakan HTML FORM dan tombol submit tapi kali ini dengan metode POST sebagai berikut

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

Berikut adalah output aktual dari formulir di atas. Anda memasukkan Nama Depan dan Belakang, lalu klik tombol kirim untuk melihat hasilnya.

Meneruskan Data Kotak Centang ke Program CGI

Kotak centang digunakan ketika lebih dari satu opsi diperlukan untuk dipilih.

Berikut adalah contoh kode HTML untuk formulir dengan dua kotak centang

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

Hasil dari kode ini adalah bentuk berikut

Di bawah ini adalah program C++, yang akan menghasilkan skrip cpp_checkbox.cgi untuk menangani input yang diberikan oleh browser web melalui tombol kotak centang.

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

Meneruskan Data Tombol Radio ke Program CGI

Tombol Radio digunakan ketika hanya satu opsi yang diperlukan untuk dipilih.

Berikut adalah contoh kode HTML untuk formulir dengan dua tombol radio −

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

Hasil dari kode ini adalah bentuk berikut

Di bawah ini adalah program C++, yang akan menghasilkan skrip cpp_radiobutton.cgi untuk menangani input yang diberikan oleh browser web melalui tombol radio.

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

Meneruskan Data Area Teks ke Program CGI

Elemen TEXTAREA digunakan ketika teks multiline harus diteruskan ke Program CGI.

Berikut adalah contoh kode HTML untuk formulir dengan kotak 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>

Hasil dari kode ini adalah bentuk berikut

Di bawah ini adalah program C++, yang akan menghasilkan skrip cpp_textarea.cgi untuk menangani input yang diberikan oleh browser web melalui area teks.

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

Meneruskan Data Kotak Turun ke Program CGI

Drop down Box digunakan ketika kita memiliki banyak pilihan yang tersedia tetapi hanya satu atau dua yang akan dipilih.

Berikut adalah contoh kode HTML untuk formulir dengan satu 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>

Hasil dari kode ini adalah bentuk berikut

Di bawah ini adalah program C++, yang akan menghasilkan script cpp_dropdown.cgi untuk menangani input yang diberikan oleh web browser melalui drop down box.

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

Menggunakan Cookie di CGI

Protokol HTTP adalah protokol stateless. Tetapi untuk situs web komersial diperlukan untuk menjaga informasi sesi di antara halaman yang berbeda. Misalnya satu pendaftaran pengguna berakhir setelah menyelesaikan banyak halaman. Tapi bagaimana menjaga informasi sesi pengguna di semua halaman web.

Dalam banyak situasi, menggunakan cookie adalah metode yang paling efisien untuk mengingat dan melacak preferensi, pembelian, komisi, dan informasi lain yang diperlukan untuk pengalaman pengunjung atau statistik situs yang lebih baik.

Cara Kerjanya

Server Anda mengirimkan beberapa data ke browser pengunjung dalam bentuk cookie. Browser dapat menerima cookie. Jika ya, itu disimpan sebagai catatan teks biasa di hard drive pengunjung. Sekarang, ketika pengunjung tiba di halaman lain di situs Anda, cookie tersedia untuk diambil. Setelah diambil, server Anda mengetahui/mengingat apa yang disimpan.

Cookie adalah catatan data teks biasa dari 5 bidang panjang variabel

  • Kedaluwarsa Ini menunjukkan tanggal cookie akan kedaluwarsa. Jika ini kosong, cookie akan kedaluwarsa saat pengunjung keluar dari browser.

  • Domain Ini menunjukkan nama domain situs Anda.

  • Jalur Ini menunjukkan jalur ke direktori atau halaman web yang mengatur cookie. Ini mungkin kosong jika Anda ingin mengambil cookie dari direktori atau halaman mana pun.

  • Aman Jika kolom ini berisi kata "aman" maka cookie hanya dapat diambil dengan server yang aman. Jika bidang ini kosong, tidak ada batasan seperti itu.

  • Nama =Nilai Cookie ditetapkan dan diambil dalam bentuk pasangan kunci dan nilai.

Menyiapkan Cookie

Sangat mudah untuk mengirim cookie ke browser. Cookie ini akan dikirim bersama dengan HTTP Header sebelum Content-type diajukan. Dengan asumsi Anda ingin mengatur UserID dan Password sebagai cookie. Jadi pengaturan cookie akan dilakukan sebagai berikut

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

Dari contoh ini, Anda pasti sudah mengerti cara mengatur cookie. Kami menggunakan Set-Cookie Header HTTP untuk menyetel cookie.

Di sini, adalah opsional untuk mengatur atribut cookie seperti Expires, Domain, dan Path. Perlu dicatat bahwa cookie disetel sebelum mengirim garis ajaib "Content-type:text/html\r\n\r\n .

Kompilasi program di atas untuk menghasilkan setcookies.cgi, dan coba set cookie menggunakan tautan berikut. Ini akan mengatur empat cookie di komputer Anda

/cgi-bin/setcookies.cgi

Mengambil Cookie

Sangat mudah untuk mengambil semua cookie yang ditetapkan. Cookie disimpan dalam variabel lingkungan CGI HTTP_COOKIE dan mereka akan memiliki formulir berikut.

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

Berikut adalah contoh cara mengambil 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;
}

Sekarang, kompilasi program di atas untuk menghasilkan getcookies.cgi, dan coba dapatkan daftar semua cookie yang tersedia di komputer Anda −

/cgi-bin/getcookies.cgi

Ini akan menghasilkan daftar keempat cookie yang disetel di bagian sebelumnya dan semua cookie lain yang disetel di komputer Anda

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

Contoh Unggah File

Untuk mengunggah file, formulir HTML harus memiliki atribut enctype yang disetel ke multipart/form-data . Tag input dengan jenis file akan membuat tombol "Jelajahi".

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

Hasil dari kode ini adalah bentuk berikut

Catatan Contoh di atas telah dinonaktifkan dengan sengaja untuk menghentikan orang mengunggah file di server kami. Tetapi Anda dapat mencoba kode di atas dengan server Anda.

Ini scriptnya cpp_uploadfile.cpp untuk menangani unggahan file

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

Contoh di atas adalah untuk menulis konten di cout streaming tetapi Anda dapat membuka aliran file dan menyimpan konten file yang diunggah dalam file di lokasi yang diinginkan.

Semoga Anda menikmati tutorial ini. Jika ya, kirimkan masukan Anda kepada kami.


Bahasa C

  1. Ruang nama dalam Pemrograman C#
  2. Operator C++
  3. Komentar C++
  4. Melewati Array ke Fungsi dalam Pemrograman C++
  5. C Tutorial
  6. Ikhtisar C++
  7. Konstanta/Literal C++
  8. Operator di C++
  9. Angka dalam C++
  10. Referensi C++