Pengaturcaraan Web C++


Apakah itu CGI?

  • Antara Muka Gerbang Biasa (CGI) ialah satu set piawaian yang mentakrifkan cara pertukaran maklumat antara pelayan web dan skrip klien.

  • Spesifikasi CGI pada masa ini dikekalkan oleh NCSA mentakrifkan CGI seperti berikut:

  • Antara Muka Gerbang Biasa (CGI) ialah standard antara muka. untuk menyambungkan atur cara get laluan luaran kepada pelayan maklumat (seperti pelayan HTTP).

  • Versi semasa ialah CGI/1.1 dan versi CGI/1.2 sedang dijalankan.

Pelayaran Web

Untuk lebih memahami konsep CGI, mari klik pada hiperpautan, semak imbas ke halaman web atau URL tertentu dan lihat apa yang berlaku.

  • Pelayar anda menghubungi pelayan web HTTP dan meminta URL, iaitu nama fail.

  • Pelayan web akan menghuraikan URL dan mencari nama fail. Jika fail yang diminta ditemui, pelayan web menghantar semula fail itu ke penyemak imbas, jika tidak, ia menghantar mesej ralat yang menunjukkan bahawa anda meminta fail yang salah.

  • Pelayar web mendapat respons daripada pelayan web dan memaparkan fail atau mesej ralat berdasarkan respons yang diterima.

Walau bagaimanapun, pelayan HTTP dibina dengan cara ini, apabila fail dalam direktori diminta, apa yang dihantar semula oleh pelayan HTTP bukanlah fail, tetapi dilaksanakan dalam bentuk program , dan hantar output yang dihasilkan oleh pelaksanaan kembali ke penyemak imbas untuk paparan.

Antara Muka Gerbang Biasa (CGI) ialah protokol standard yang membolehkan aplikasi (dipanggil program CGI atau skrip CGI) berinteraksi dengan pelayan web dan pelanggan. Program CGI ini boleh ditulis dalam Python, PERL, Shell, C atau C++, dsb.

Rajah Seni Bina CGI

Rajah berikut menunjukkan seni bina CGI:

cgiarch.gif

Konfigurasi Pelayan Web

Sebelum anda melaksanakan pengaturcaraan CGI, sila buat pasti Pelayan Web anda menyokong CGI dan dikonfigurasikan untuk mengendalikan program CGI. Semua program CGI yang dilaksanakan oleh pelayan HTTP mesti berada dalam direktori prakonfigurasi. Direktori ini dipanggil direktori CGI dan secara konvensional dinamakan /var/www/cgi-bin. Walaupun fail CGI ialah fail boleh laku C++, mengikut kebiasaan sambungannya ialah .cgi.

Secara lalai, pelayan web Apache dikonfigurasikan untuk menjalankan program CGI dalam /var/www/cgi-bin. Jika anda ingin menentukan direktori lain untuk menjalankan skrip CGI, anda boleh mengubah suai bahagian berikut dalam fail 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, kami menganggap bahawa pelayan web telah dikonfigurasikan dan boleh berjalan dengan jayanya, anda boleh jalankan sebarang program CGI, seperti Perl atau Shell, dsb.

Program CGI pertama

Sila lihat 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 - 第一个 CGI 程序</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Kompilkan kod di atas, namakan fail boleh laku cplusplus.cgi dan simpan fail ini dalam direktori /var/www/cgi-bin. Sebelum menjalankan program CGI, sila gunakan perintah UNIX chmod 755 cplusplus.cgi untuk mengubah suai mod fail bagi memastikan fail boleh laku. Akses fail boleh laku dan anda akan melihat output berikut:

Hello World Ini adalah program CGI pertama saya

Program C++ di atas ialah program ringkas yang meletakkannya Output ditulis pada! Fail STDOUT, yang dipaparkan pada skrin. Di sini, perlu diperhatikan bahawa baris pertama mengeluarkan Content-type: text/htmlrnrn. Baris ini dihantar kembali ke penyemak imbas dan menentukan jenis kandungan yang akan dipaparkan pada tetingkap penyemak imbas. Anda mesti memahami konsep asas CGI supaya anda boleh maju untuk menulis program CGI yang lebih kompleks menggunakan Python. Program CGI C++ boleh berinteraksi dengan mana-mana sistem luaran lain (seperti RDBMS).

Maklumat pengepala HTTP

barisContent-type:text/htmlrnrn ialah sebahagian daripada maklumat pengepala HTTP, yang dihantar ke penyemak imbas untuk memahami kandungan halaman dengan lebih baik. Bentuk maklumat pengepala HTTP adalah seperti berikut:

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

Terdapat beberapa maklumat pengepala HTTP penting lain, yang sering digunakan dalam pengaturcaraan CGI anda.

头信息描述
Content-type:MIME 字符串,定义返回的文件格式。例如 Content-type:text/html。
Expires: Date信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。
Location: URL这个 URL 是指应该返回的 URL,而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。
Last-modified: Date资源的最后修改日期。
Content-length: N要返回的数据的长度,以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。
Set-Cookie: String通过 string 设置 cookie。

Pembolehubah persekitaran CGI

Semua program CGI boleh mengakses pembolehubah persekitaran berikut. Pembolehubah ini memainkan peranan yang sangat penting semasa menulis program CGI.

变量名描述
CONTENT_TYPE内容的数据类型。当客户端向服务器发送附加内容时使用。例如,文件上传等功能。
CONTENT_LENGTH查询的信息长度。只对 POST 请求可用。
HTTP_COOKIE以键 & 值对的形式返回设置的 cookies。
HTTP_USER_AGENT用户代理请求标头字段,递交用户发起请求的有关信息,包含了浏览器的名称、版本和其他平台性的附加信息。
PATH_INFOCGI 脚本的路径。
QUERY_STRING通过 GET 方法发送请求时的 URL 编码信息,包含 URL 中问号后面的参数。
REMOTE_ADDR发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。
REMOTE_HOST发出请求的主机的完全限定名称。如果此信息不可用,则可以用 REMOTE_ADDR 来获取 IP 地址。
REQUEST_METHOD用于发出请求的方法。最常见的方法是 GET 和 POST。
SCRIPT_FILENAMECGI 脚本的完整路径。
SCRIPT_NAMECGI 脚本的名称。
SERVER_NAME服务器的主机名或 IP 地址。
SERVER_SOFTWARE服务器上运行的软件的名称和版本。

Program CGI berikut menyenaraikan semua pembolehubah CGI.

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {                 
        "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",   
        "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",             
        "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",         
        "HTTP_HOST", "HTTP_USER_AGENT", "PATH",            
        "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",      
        "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
        "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",      
        "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",     
        "SERVER_SIGNATURE","SERVER_SOFTWARE" };   

int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 环境变量</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ )
   {
       cout << "<tr><td>" << ENV[ i ] << "</td><td>";
       // 尝试检索环境变量的值
       char *value = getenv( ENV[ i ].c_str() );  
       if ( value != 0 ){
         cout << value;                                 
       }else{
         cout << "环境变量不存在。";
       }
       cout << "</td></tr>\n";
   }
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Pustaka CGI C++

Dalam contoh dunia sebenar, anda perlu melakukan banyak operasi melalui program CGI. Terdapat perpustakaan CGI yang ditulis khas untuk program C++ Kami boleh memuat turun perpustakaan CGI ini dari ftp://ftp.gnu.org/gnu/cgicc/ dan ikuti langkah di bawah untuk memasang perpustakaan:

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

Anda. boleh klik C++ CGI Lib Documentation untuk melihat dokumentasi perpustakaan yang berkaitan.

Kaedah GET dan POST

Anda mungkin menghadapi situasi apabila anda perlu menghantar beberapa maklumat daripada penyemak imbas ke pelayan web dan akhirnya ke program CGI. Biasanya pelayar akan menggunakan dua kaedah untuk menghantar maklumat ini ke pelayan web iaitu kaedah GET dan POST.

Gunakan kaedah GET untuk menghantar maklumat

Kaedah GET menghantar maklumat pengguna yang dikodkan yang dilampirkan pada permintaan halaman. Halaman dan maklumat yang dikodkan dipisahkan oleh aksara ?, seperti yang ditunjukkan di bawah:

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

Kaedah GET ialah kaedah lalai untuk menghantar maklumat daripada pelayar ke pelayan Web. Ia akan menghasilkan rentetan yang sangat panjang . Jangan gunakan kaedah GET apabila anda menghantar kata laluan atau beberapa maklumat sensitif lain kepada pelayan. Kaedah GET mempunyai had saiz dan sehingga 1024 aksara boleh dihantar dalam rentetan permintaan.

Apabila menggunakan kaedah GET, pengepala QUERY_STRING http digunakan untuk menghantar maklumat, yang boleh diakses menggunakan pembolehubah persekitaran QUERY_STRING dalam program CGI.

Anda boleh menghantar maklumat dengan mengikuti URL dengan pasangan nilai kunci yang ringkas atau dengan menggunakan kaedah GET bagi teg HTML <FORM>

Contoh URL mudah: Kaedah Dapatkan

Berikut ialah URL ringkas yang menggunakan kaedah GET untuk menghantar dua nilai ​​​​kepada program hello_get.py.

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

Contoh berikut menjana program CGI cpp_get.cgi untuk memproses maklumat yang diberikan oleh web input pelayar. Maklumat yang diluluskan boleh diakses dengan mudah dengan menggunakan perpustakaan C++ CGI:

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>使用 GET 和 POST 方法</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "名:" << **fi << endl;  
   }else{
      cout << "No text entered for first name" << endl;  
   }
   cout << "<br/>\n";
   fi = formData.getElement("last_name");  
   if( !fi->isEmpty() &&fi != (*formData).end()) {  
      cout << "姓:" << **fi << endl;  
   }else{
      cout << "No text entered for last name" << endl;  
   }
   cout << "<br/>\n";

   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Sekarang, susun atur cara di atas seperti berikut:

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

Jana cpp_get.cgi dan letakkannya dalam direktori CGI dan cuba untuk aksesnya menggunakan pautan berikut:

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

Ini akan menghasilkan keputusan berikut:

名:ZARA 
姓:ALI

Contoh bentuk mudah : Kaedah GET

Berikut ialah contoh mudah menggunakan borang HTML dan butang hantar untuk menghantar dua nilai. Kami akan menggunakan skrip CGI yang sama cpp_get.cgi untuk mengendalikan input.

<form action="/cgi-bin/cpp_get.cgi" method="get">
名:<input type="text" name="first_name">  <br />
 
姓:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>

Berikut adalah output sebenar borang di atas, sila masukkan nama pertama dan nama keluarga, kemudian klik butang hantar untuk melihat keputusan.

Gunakan kaedah POST untuk menghantar maklumat

Cara yang lebih dipercayai untuk menghantar maklumat kepada program CGI ialah kaedah POST. Kaedah ini membungkus maklumat dengan cara yang sama seperti kaedah GET, kecuali ia menghantar maklumat sebagai rentetan teks selepas ? Mesej ini dihantar ke skrip CGI sebagai input standard.

Kami juga menggunakan program cpp_get.cgi untuk mengendalikan kaedah POST. Mari kita ambil contoh yang sama dan lulus dua nilai dengan menggunakan borang HTML dan butang hantar, kecuali kali ini daripada menggunakan kaedah GET, kami menggunakan kaedah POST seperti berikut:

<form action="/cgi-bin/cpp_get.cgi" method="post">
名:<input type="text" name="first_name"><br />
姓:<input type="text" name="last_name" />
 
<input type="submit" value="提交" />
</form>

Ke Pas program CGI data kotak semak

Kami menggunakan kotak pilihan apabila berbilang pilihan perlu dipilih.

Contoh kod HTML berikut ialah borang dengan dua kotak pilihan:

<form action="/cgi-bin/cpp_checkbox.cgi" 
         method="POST" 
         target="_blank">
<input type="checkbox" name="maths" value="on" /> 数学
<input type="checkbox" name="physics" value="on" /> 物理
<input type="submit" value="选择学科" />
</form>

Atur cara C++ berikut menjana skrip cpp_checkbox.cgi untuk mengendalikan kotak pilihan yang diluluskan oleh input pelayar web yang diberikan oleh kotak.

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   bool maths_flag, physics_flag;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递复选框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   maths_flag = formData.queryCheckbox("maths");
   if( maths_flag ) {  
      cout << "Maths Flag: ON " << endl;  
   }else{
      cout << "Maths Flag: OFF " << endl;  
   }
   cout << "<br/>\n";

   physics_flag = formData.queryCheckbox("physics");
   if( physics_flag ) {  
      cout << "Physics Flag: ON " << endl;  
   }else{
      cout << "Physics Flag: OFF " << endl;  
   }
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Haruskan data butang radio ke program CGI

Kami menggunakan butang radio apabila hanya satu pilihan yang perlu dipilih.

Contoh kod HTML berikut ialah borang dengan dua butang radio:

<form action="/cgi-bin/cpp_radiobutton.cgi" 
         method="post" 
         target="_blank">
<input type="radio" name="subject" value="maths" 
                                    checked="checked"/> 数学 
<input type="radio" name="subject" value="physics" /> 物理
<input type="submit" value="选择学科" />
</form>

Atur cara C++ berikut akan menjana skrip cpp_radiobutton.cgi, yang digunakan untuk mengendalikan pemilihan radio oleh penyemak imbas web Input yang diberikan oleh butang.

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递单选按钮数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("subject");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Radio box selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Haluskan data kawasan teks ke program CGI

Apabila kami perlu menghantar berbilang baris teks ke program CGI, kami menggunakan elemen TEXTAREA.

Contoh kod HTML berikut ialah borang dengan kotak TEXTAREA:

<form action="/cgi-bin/cpp_textarea.cgi" 
         method="post" 
         target="_blank">
<textarea name="textcontent" cols="40" rows="4">
请在这里输入文本...
</textarea>
<input type="submit" value="提交" />
</form>

Program C++ berikut akan menjana skrip cpp_textarea.cgi untuk memproses kawasan teks yang diberikan oleh penyemak imbas web.

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递文本区域数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("textcontent");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Text Content: " << **fi << endl;  
   }else{
      cout << "No text entered" << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Menyalurkan data kotak lungsur ke program CGI

Kami menggunakan kotak lungsur apabila terdapat berbilang pilihan yang tersedia tetapi hanya satu atau dua pilihan boleh dipilih.

Contoh kod HTML berikut ialah borang dengan kotak lungsur:

<form action="/cgi-bin/cpp_dropdown.cgi" 
                       method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>数学</option>
<option value="Physics">物理</option>
</select>
<input type="submit" value="提交"/>
</form>

Atur cara C++ berikut akan menjana skrip cpp_dropdown.cgi, yang digunakan untuk memproses maklumat yang diberikan oleh pelayar web melalui kotak drop-down enter.

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递下拉框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("dropdown");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Value Selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Menggunakan Kuki dalam CGI

Protokol HTTP ialah protokol tanpa kewarganegaraan. Tetapi untuk laman web komersial, ia perlu mengekalkan maklumat sesi antara halaman yang berbeza. Sebagai contoh, pengguna menamatkan pendaftaran selepas melengkapkan berbilang halaman langkah. Tetapi bagaimana untuk mengekalkan maklumat sesi pengguna merentas semua halaman web.

Dalam kebanyakan kes, menggunakan kuki ialah cara paling berkesan untuk mengingati dan menjejaki maklumat tentang pilihan pengguna, pembelian, komisen dan maklumat lain yang diperlukan dalam mengejar pengalaman pelawat atau statistik tapak yang lebih baik.

Cara ia berfungsi

Pelayan menghantar beberapa data ke penyemak imbas pelawat dalam bentuk kuki. Jika penyemak imbas menerima kuki, kuki itu disimpan sebagai rekod teks biasa pada pemacu keras pelawat. Kini, apabila pelawat melawat halaman lain di tapak web, kuki itu diambil semula. Setelah kuki ditemui, pelayan mengetahui apa yang disimpan.

Kuki ialah rekod data teks biasa dengan 5 medan panjang berubah-ubah:

  • Tamat tempoh: Tarikh tamat tempoh kuki . Jika medan ini dibiarkan kosong, kuki akan tamat tempoh apabila pelawat keluar dari penyemak imbas.

  • Domain: Nama domain tapak web.

  • Laluan : Laluan ke direktori atau halaman web tempat kuki ditetapkan. Medan ini boleh dibiarkan kosong jika anda ingin mendapatkan semula kuki daripada mana-mana direktori atau halaman web.

  • Secure : Jika medan ini mengandungi perkataan "secure", maka kuki hanya boleh diambil melalui pelayan yang selamat. Jika medan ini dibiarkan kosong, sekatan ini tidak wujud.

  • Name=Nilai : Kuki ditetapkan dan diambil semula dalam bentuk pasangan nilai kunci.

Tetapkan Kuki

Menghantar kuki ke penyemak imbas anda adalah sangat mudah. Kuki ini dihantar bersama dengan pengepala HTTP sebelum medan Jenis kandungan. Katakan anda ingin menetapkan ID Pengguna dan Kata Laluan sebagai kuki, langkah-langkah untuk menetapkan kuki adalah seperti 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.w3cschool.cc;\r\n";
   cout << "Set-Cookie:Path=/perl;\n";
   cout << "Content-type:text/html\r\n\r\n";

   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   cout << "设置 cookies" << endl;  
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Daripada contoh ini, kami memahami cara menetapkan kuki. Kami menggunakan Set-Cookie pengepala HTTP untuk menetapkan kuki.

Di sini, beberapa sifat untuk menetapkan kuki adalah pilihan, seperti Tamat Tempoh, Domain dan Laluan. Perlu diingat bahawa kuki ditetapkan sebelum menghantar baris "Content-type:text/htmlrnrn.

Kompilasi atur cara di atas, jana setcookies.cgi, dan cuba gunakan Pautan berikut Set Cookies. Ia menetapkan empat kuki pada komputer anda:

/cgi-bin/setcookies.cgi

Dapatkan Kuki

Dapatkan semula semua kuki yang ditetapkan Ya Sangat mudah dalam pembolehubah persekitaran CGI HTTP_COOKIE, dan bentuknya adalah seperti berikut:

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

Contoh berikut menunjukkan cara mendapatkan kuki

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

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

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // 获取环境变量
   const CgiEnvironment& env = cgi.getEnvironment();

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

Sekarang, susun atur cara di atas, Jana getcookies.cgi dan cuba. untuk mendapatkan semua kuki yang tersedia pada komputer anda menggunakan pautan di bawah:

/cgi-bin/getcookies.cgi

Ini akan menghasilkan senarai yang menunjukkan di atas Empat kuki yang ditetapkan dalam bahagian ini, serta semua kuki lain pada komputer anda:

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

Contoh Muat Naik Fail

Untuk memuat naik fail, borang HTML mesti mempunyai atribut enctype ditetapkan kepada berbilang bahagian/bentuk- data. Teg input dengan jenis fail mencipta butang "Semak imbas" Hasil kod ini ialah bentuk berikut:

Nota:

Contoh di atas sengaja melumpuhkan penyimpanan. memuat naik fail pada pelayan kami. Anda boleh mencuba kod di atas pada pelayan anda sendiri Berikut ialah skrip untuk mengendalikan muat naik fail

cpp_uploadfile.cpp

:

<html>
<body>
   <form enctype="multipart/form-data" 
            action="/cgi-bin/cpp_uploadfile.cgi" 
            method="post">
   <p>文件:<input type="file" name="userfile" /></p>
   <p><input type="submit" value="上传" /></p>
   </form>
</body>
</html>
The. contoh di atas menulis kandungan dalam strim

cout

, tetapi anda boleh membuka strim fail dan menyimpan kandungan fail yang dimuat naik dalam sasaran dalam fail di lokasi .