Latest web development tutorials
×

C++ หลักสูตร

C++ หลักสูตร C++ แนะนำโดยย่อ C++ การตั้งค่าสภาพแวดล้อม C++ ไวยากรณ์พื้นฐาน C++ หมายเหตุ C++ ชนิดข้อมูล C++ ประเภทตัวแปร C++ ขอบเขตตัวแปร C++ คงที่ C++ ประเภทการปรับเปลี่ยน C++ ประเภทการจัดเก็บ C++ ผู้ประกอบการ C++ การไหลเวียน C++ ผู้พิพากษา C++ ฟังก์ชัน C++ ดิจิตอล C++ แถว C++ เชือก C++ ชี้ C++ อ้างอิง C++ วันที่และเวลา C++ เอาท์พุทหรือ Basic Input C++ โครงสร้างข้อมูล

C++ เชิงวัตถุ

C++ คลาสและวัตถุ C++ สืบทอด C++ ผู้ประกอบการมากเกินไปและการทำงานมากเกินไป C++ polymorphism C++ ข้อมูลที่เป็นนามธรรม C++ ข้อมูล encapsulation C++ อินเตอร์เฟซ(ระดับนามธรรม)

C++ การสอนที่ทันสมัย

C++ แฟ้มและสตรีม C++ การจัดการข้อยกเว้น C++ หน่วยความจำแบบไดนามิก C++ namespaces C++ แบบ C++ preprocessor C++ การประมวลผลสัญญาณ C++ multithreading C++ Web โครงการ

C++ กรุ

C++ STL หลักสูตร C++ ห้องสมุดมาตรฐาน C++ ทรัพยากรที่มีประโยชน์

c ++ เขียนโปรแกรมเว็บ

CGI คืออะไร?

  • Common Gateway Interface (CGI) เป็นมาตรฐานที่กำหนดวิธีการแลกเปลี่ยนข้อมูลระหว่างเว็บเซิร์ฟเวอร์และฝั่งไคลเอ็นต์สคริปต์
  • สเปซีจีจะยังคงอยู่ในขณะนี้โดย CGI NCSA, NCSA ถูกกำหนดไว้ดังต่อไปนี้:
  • Common Gateway Interface (CGI) เป็นประตูสำหรับโปรแกรมภายนอกกับเซิร์ฟเวอร์ข้อมูล (เช่นเซิร์ฟเวอร์ HTTP) มาตรฐานอินเตอร์เฟซที่เทียบท่า
  • รุ่นปัจจุบันเป็น CGI / 1.1, CGI / 1.2 รุ่นก้าวหน้า

เว็บเบราเซอร์

เพื่อให้เข้าใจแนวคิดของ CGI ลองคลิกที่เชื่อมโยงหลายมิติเรียกดูหน้าเว็บหรือ URL และดูสิ่งที่เกิดขึ้น

  • เบราว์เซอร์ของคุณเชื่อมโยงบน HTTP เว็บเซิร์ฟเวอร์และขอ URL ที่เป็นชื่อไฟล์
  • เว็บเซิร์ฟเวอร์แก้ไข URL และหาชื่อไฟล์ หากคุณพบแฟ้มที่ร้องขอเว็บเซิร์ฟเวอร์จะส่งแฟ้มกลับไปยังเบราว์เซอร์มิฉะนั้นส่งข้อความผิดพลาดแสดงว่าคุณกำลังร้องขอไฟล์ผิด
  • เว็บเบราเซอร์ที่จะได้รับการตอบสนองจากเว็บเซิร์ฟเวอร์และขึ้นอยู่กับการตอบสนองที่ได้รับในการแสดงไฟล์หรือข้อผิดพลาด

แต่ในลักษณะที่จะสร้างขึ้นเซิร์ฟเวอร์ HTTP โดยไม่คำนึงถึงเมื่อจะขอไดเรกทอรีไฟล์เซิร์ฟเวอร์ HTTP จะไม่ส่งกลับไฟล์ แต่ในรูปแบบของการดำเนินโครงการและการดำเนินงานของการส่งออกที่สร้างขึ้นจะถูกส่งกลับไปยังจอแสดงผลเบราว์เซอร์ ออก

Common Gateway Interface (CGI) คือการทำให้โปรแกรมประยุกต์ (เรียกว่าโปรแกรม CGI หรือสคริปต์ CGI) จะทำงานร่วมกับเว็บเซิร์ฟเวอร์และลูกค้ามีปฏิสัมพันธ์โปรโตคอลมาตรฐาน โปรแกรม CGI เหล่านี้สามารถใช้งูหลาม, Perl, Shell, C หรือ C ++ ฯลฯ เพื่อเตรียมความพร้อม

แผนภูมิ CGI

ภาพประกอบต่อไปนี้แสดงให้เห็นถึงสถาปัตยกรรมที่ CGI:

สถาปัตยกรรม CGI

การกำหนดค่าเซิร์ฟเวอร์เว็บ

ก่อนที่คุณจะทำให้การเขียนโปรแกรม CGI, ตรวจสอบให้แน่ใจว่าเว็บเซิร์ฟเวอร์ของคุณสนับสนุน CGI, และได้รับการกำหนดค่าการจัดการโปรแกรม CGI โปรแกรม CGI ทั้งหมดดำเนินการโดยเซิร์ฟเวอร์ HTTP จะต้องมีการไดเรกทอรีที่กำหนดไว้ล่วงหน้า ไดเรกทอรีนี้เรียกว่าไดเรกทอรี CGI, โดยการประชุมชื่อ / var / www / cgi-bin แม้ว่า CGI แฟ้มที่ปฏิบัติการคือ C ++ แต่โดยการประชุมก็เป็น.cgi นามสกุล

โดยค่าเริ่มต้น Apache เว็บเซิร์ฟเวอร์จะกำหนดค่าให้ทำงานใน / var / www / cgi-bin ในโปรแกรม CGI ถ้าคุณต้องการระบุไดเรกทอรีอื่นเพื่อเรียกใช้สคริปต์ CGI, คุณสามารถปรับเปลี่ยนส่วนต่อไปนี้ในไฟล์ 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>

ที่นี่เราจะสมมติว่าคุณมีเว็บเซิร์ฟเวอร์และสามารถทำงานได้สำเร็จคุณสามารถเรียกใช้โปรแกรม CGI ใด ๆ เช่น Perl หรือเชลล์และชอบ

โปรแกรม CGI แรก

พิจารณาต่อไปนี้โปรแกรม c ++:

#include <iostream>
using namespace std;
 
int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Hello World - 第一个 CGI 程序</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

รวบรวมรหัสก่อนหน้าแฟ้มที่ปฏิบัติการได้รับการตั้งชื่อ cplusplus.cgi และไฟล์นี้ถูกบันทึกไว้ใน / var / www / directory cgi-bin ก่อนที่จะใช้โปรแกรม CGI กรุณาใช้chmod 755 cplusplus.cgi คำสั่ง UNIXเพื่อเปลี่ยนโหมดไฟล์ให้แน่ใจว่าไฟล์เป็นปฏิบัติการ แฟ้มที่ปฏิบัติการ Access คุณจะเห็นผลลัพธ์ต่อไปนี้:

สวัสดีชาวโลกนี้เป็นโปรแกรม CGI ครั้งแรกของฉัน

ดังกล่าวข้างต้นโปรแกรม C ++ เป็นโปรแกรมที่ง่ายก็เขียนไว้ในไฟล์ที่ส่งออก STDOUT จะปรากฏบนหน้าจอที่นี่ก็เป็นที่น่าสังเกตว่าบรรทัดแรกของการส่งออกของชนิดของเนื้อหา: text / html \ r \ n \ r \ nบรรทัดนี้จะถูกส่งกลับไปยังเบราว์เซอร์และปลายทางที่จะแสดงในเบราว์เซอร์ชนิดเนื้อหาของหน้าต่าง คุณต้องเข้าใจแนวคิดพื้นฐานของ CGI เพื่อให้เป็นไปต่อใช้งูหลามที่จะเขียนโปรแกรม CGI ที่ซับซ้อนมากขึ้น โปรแกรม CGI c ++ สามารถนำมาใช้กับระบบภายนอกอื่น ๆ (เช่น RDBMS) ในการโต้ตอบ

ข้อมูลส่วนหัว HTTP

สายContent-Type: text / html \ r \ n \ r \ n เป็นส่วนหนึ่งของข้อมูลที่ส่วนหัวของ HTTP จะถูกส่งไปยังเบราว์เซอร์ในการสั่งซื้อเพื่อให้เข้าใจเนื้อหาของหน้าในรูปแบบของข้อมูลส่วนหัว HTTP จะเป็นดังนี้:

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

มีข้อมูลส่วนหัว HTTP อื่น ๆ ที่สำคัญเหล่านี้มักจะถูกนำมาใช้ในการเขียนโปรแกรม CGI ของคุณ

头信息 描述
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。

ตัวแปร CGI สิ่งแวดล้อม

โปรแกรม CGI ทั้งหมดสามารถเข้าถึงตัวแปรสภาพแวดล้อมดังต่อไปนี้ ตัวแปรเหล่านี้เมื่อเขียนโปรแกรม CGI มีบทบาทสำคัญมาก

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

รายการต่อไปนี้ทุกตัวแปรโปรแกรม CGI 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;
}

ห้องสมุด c ++ CGI

ในตัวอย่างจริงที่คุณต้องดำเนินการหลายโปรแกรม CGI มีโปรแกรมที่ออกแบบมาเฉพาะสำหรับห้องสมุด CGI c ++ เขียนเราสามารถเป็น ftp://ftp.gnu.org/gnu/cgicc/~~V ดาวน์โหลดห้องสมุด CGI นี้ที่ห้องสมุดและติดตั้งตามขั้นตอนต่อไปนี้:

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

คุณสามารถคลิกที่ c ++ ซีจี Lib เอกสาร ดูเอกสารห้องสมุด

GET และวิธีการ POST

คุณอาจได้พบสถานการณ์ดังกล่าวเมื่อคุณต้องผ่านข้อมูลบางอย่างจากเบราว์เซอร์ไปยังเว็บเซิร์ฟเวอร์และในที่สุดก็ส่งผ่านไปยังโปรแกรม CGI โดยปกติเบราว์เซอร์สองวิธีที่จะใช้ข้อมูลนี้ไปยังเว็บเซิร์ฟเวอร์ที่มีวิธี GET และ POST

ใช้วิธีการ GET เพื่อส่งผ่านข้อมูล

มีวิธีการในการส่งข้อมูลของผู้ใช้เข้ารหัสผนวกเข้ากับการร้องขอเพจ หน้าและการเข้ารหัสข้อมูลแยกจากกันโดยตัวอักษรดังนี้ ?:

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

วิธีการได้รับคือวิธีการเริ่มต้นจากเบราว์เซอร์ในการถ่ายโอนข้อมูลเว็บเซิร์ฟเวอร์มันเป็นสายยาวของสตริงถูกสร้างขึ้นในแถบที่อยู่ของเบราว์เซอร์ เมื่อมีการใช้รหัสผ่านหรือข้อมูลสำคัญอื่น ๆ ที่คุณส่งผ่านไปยังเซิร์ฟเวอร์ที่ไม่ได้ใช้วิธีการ GET มีวิธีการมีข้อ จำกัด ในขนาดในสตริงคำขอโอนถึง 1024 อักขระ

เมื่อคุณใช้วิธีการ GET คือการใช้ส่วนหัว QUERY_STRING HTTP เพื่อส่งข้อมูลให้ใช้ตัวแปรสภาพแวดล้อม QUERY_STRING ในโปรแกรม CGI ในการเข้าถึง

คุณสามารถให้ทันกับความสำคัญใน URL ของการเชื่อมต่อที่ง่ายที่คุณยังสามารถใช้ HTML มีวิธีการ <form> แท็กเพื่อส่งข้อมูล

ตัวอย่าง URL แบบง่าย: มีวิธีการ

นี่คือ URL ที่เรียบง่ายใช้วิธีการ GET ที่จะผ่านสองค่าที่จะ hello_get.py โปรแกรม

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

ตัวอย่างต่อไปนี้สร้างโปรแกรมCGI cpp_get.cgi สำหรับการประมวลผลการป้อนข้อมูลที่ได้รับจากเว็บเบราเซอร์โดยการใช้ห้องสมุด 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;
}

ตอนนี้รวบรวมโปรแกรมข้างต้นดังต่อไปนี้:

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

สร้าง cpp_get.cgi และวางไว้ในไดเรกทอรี CGI และพยายามที่จะเข้าถึงการเชื่อมโยงต่อไปนี้:

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

นี้ก่อให้เกิดผลลัพธ์ต่อไปนี้:

名:ZARA 
姓:ALI 

ตัวอย่างของรูปแบบที่เรียบง่าย: มีวิธีการ

นี่คือตัวอย่างง่ายๆโดยใช้รูปแบบ HTML และปุ่มส่งผ่านไปสองค่า เราจะใช้ cpp_get.cgi สคริปต์ CGI เดียวกันในการประมวลผลการป้อนข้อมูล

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

นี่คือผลลัพธ์ที่เกิดขึ้นจริงของฟอร์มใส่ชื่อและนามสกุลแล้วคลิกที่ปุ่มส่งเพื่อดูผล

โดยใช้วิธีการโพสต์เพื่อส่งข้อมูล

วิธีการที่เชื่อถือได้มากขึ้นของการส่งผ่านข้อมูลไปยังโปรแกรม CGI เป็นวิธีการ POST วิธีการในการบรรจุข้อมูลด้วยวิธีการได้รับวิธีเดียวกันยกเว้นว่ามันไม่ได้เป็นข้อความเป็นสตริงข้อความใน URL นี้หลังจากถูกส่งผ่านไป แต่ใส่ไว้ในข้อความที่แยกจากกันในรูปแบบของการจัดส่ง ข้อความจะถูกส่งผ่านไปยังป้อนข้อมูลมาตรฐานในรูปแบบของสคริปต์ซีจี

เรายังใช้ cpp_get.cgi ที่จะจัดการกับวิธีการ POST ลองมาตัวอย่างเดียวกันที่จะผ่านการใช้รูปแบบ HTML และปุ่มส่งสองค่า แต่คราวนี้เราจะไม่ใช้วิธีการ GET แต่วิธีการโพสต์ดังต่อไปนี้:

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

โปรแกรม CGI เพื่อส่งผ่านข้อมูลไปยังกล่อง

เมื่อคุณต้องเลือกหลายตัวเลือกที่เรากำลังใช้ช่องทำเครื่องหมาย

ตัวอย่างรหัส HTML ต่อไปนี้เป็นรูปแบบที่มีสองช่องทำเครื่องหมาย A:

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

ต่อไปนี้โปรแกรม C ++ จะสร้างสคริปต์ cpp_checkbox.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;
   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;
}

ถ่ายโอนข้อมูลไปโปรแกรม CGI ปุ่ม

เมื่อจะต้องเลือกตัวเลือกที่เราจะใช้ปุ่ม

ตัวอย่างรหัส HTML ต่อไปนี้เป็นรูปแบบที่มีสองปุ่ม A:

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

ต่อไปนี้โปรแกรม C ++ จะสร้างสคริปต์ cpp_radiobutton.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>向 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;
}

ถ่ายโอนข้อมูลไปโปรแกรม CGI พื้นที่ข้อความ

โปรแกรม CGI เมื่อคุณต้องการถ่ายโอนข้อความหลายบรรทัดเราจะใช้องค์ประกอบของพื้นที่ข้อความ

ตัวอย่างรหัส HTML ต่อไปนี้เป็นรูปแบบพร้อมกล่อง TEXTAREA A:

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

ต่อไปนี้โปรแกรม C ++ จะสร้างสคริปต์ cpp_textarea.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>向 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;
}

หล่นลงกล่องเพื่อส่งผ่านข้อมูลไปยังโปรแกรม CGI

เมื่อมีหลายตัวเลือกที่มีอยู่ แต่สามารถเลือกหนึ่งหรือสองตัวเลือกที่เราจะใช้กล่องแบบหล่นลง

ตัวอย่างรหัส HTML ต่อไปนี้เป็นรูปแบบที่มีกล่องแบบหล่นลง:

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

ต่อไปนี้โปรแกรม C ++ จะสร้างสคริปต์ cpp_dropdown.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>向 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;
}

ใช้คุกกี้ใน CGI,

โปรโตคอล HTTP เป็นโปรโตคอลไร้สัญชาติ แต่สำหรับเว็บไซต์ธุรกิจจะต้องมีการเก็บข้อมูลเซสชั่นที่แตกต่างกันระหว่างหน้า ตัวอย่างเช่นผู้ใช้หลังจากเสร็จสิ้นการหลายขั้นตอนปลายหน้าลงทะเบียน แต่วิธีการที่จะรักษาข้อมูลเซสชันของผู้ใช้ในทุกหน้า

ในหลายกรณีการใช้คุกกี้คือการจำและติดตามข้อมูลเกี่ยวกับการตั้งค่าของผู้ซื้อนายหน้าและวิธีที่มีประสิทธิภาพมากที่สุดอื่น ๆ สำหรับการแสวงหาข้อมูลประสบการณ์ของผู้เข้าชมเว็บไซต์ที่ดีกว่าหรือสถิติที่จำเป็น

วิธีการทำงาน

เซิร์ฟเวอร์ในรูปแบบของคุกกี้ที่จะส่งข้อมูลบางอย่างเบราว์เซอร์ของผู้เข้าชม หากเบราว์เซอร์ยอมรับคุกกี้คุกกี้จะถูกเก็บไว้เป็นข้อความธรรมดาบันทึกไว้ในฮาร์ดไดรฟ์ของผู้เข้าชม ตอนนี้เมื่อผู้เข้าชมไปยังหน้าอื่นบนเว็บไซต์ดึงคุกกี้ เมื่อคุณพบคุกกี้เซิร์ฟเวอร์จะรู้ว่าสิ่งที่ถูกเก็บไว้

คุกกี้เป็นระเบียนข้อมูลข้อความที่บริสุทธิ์ห้าทุ่งยาวตัวแปรด้วย:

  • หมดอายุ: วันหมดอายุคุกกี้ถ้าข้อมูลนี้ถูกปล่อยว่างคุกกี้จะหมดอายุเมื่อผู้เข้าชมออกจากเบราว์เซอร์
  • ชื่อโดเมนของเว็บไซต์: โดเมน
  • เส้นทาง: ตั้งค่าไดเรกทอรีเส้นทางคุกกี้หรือหน้าเว็บหากคุณต้องการที่จะดึงคุกกี้จากไดเรกทอรีหรือหน้าใดก็ได้ข้อมูลนี้สามารถปล่อยว่างไว้
  • การรักษาความปลอดภัย: ถ้าฟิลด์นี้มีคำว่า "ปลอดภัย" แล้วคุกกี้สามารถเรียกดูผ่านเซิร์ฟเวอร์ที่เชื่อถือได้ถ้าข้อมูลนี้ถูกปล่อยว่างที่ไม่มีข้อ จำกัด อยู่
  • ชื่อ = ค่า: คุกกี้ในรูปแบบของคู่ค่าคีย์ที่จะตั้งและได้รับ

การตั้งค่าคุกกี้

ส่งคุกกี้เบราว์เซอร์ที่ง่ายมาก คุกกี้เหล่านี้จะเป็นก่อนที่ข้อมูลของชนิดของเนื้อหาและส่วนหัว HTTP จะถูกส่งเข้าด้วยกัน สมมติว่าคุณต้องการที่จะตั้งค่าหมายเลขผู้ใช้และรหัสผ่านสำหรับคุกกี้ขั้นตอนการตั้งค่าคุกกี้มีดังนี้

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

จากตัวอย่างนี้เราได้เรียนรู้วิธีการตั้งค่าคุกกี้เราใช้ส่วนหัวของคุกกี้ชุด HTTP เพื่อตั้งค่าคุกกี้

นี่คือคุณสมบัติในการติดตั้งคุกกี้เป็นตัวเลือกเช่นหมดอายุโดเมนและเส้นทาง เป็นมูลค่า noting, คุกกี้จะถูกส่งในเส้น"Content-Type: text / html \ r \ n \ r \ nก่อนที่จะถูกตั้งค่า

รวบรวมโปรแกรมดังกล่าวข้างต้นที่สร้าง setcookies.cgi และพยายามที่จะใช้การเชื่อมโยงต่อไปนี้เพื่อตั้งค่าคุกกี้ มันจะตั้งค่าสี่คุกกี้บนคอมพิวเตอร์ของคุณ:

/cgi-bin/setcookies.cgi

รับคุกกี้

คุกกี้เพื่อเรียกการตั้งค่าทั้งหมดจะง่ายมาก คุกกี้จะถูกเก็บไว้ใน CGI ตัวแปรสภาพแวดล้อม HTTP_COOKIE และฟอร์มของพวกเขาจะถูกเก็บไว้ดังต่อไปนี้:

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

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการที่จะได้รับคุกกี้

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

ตอนนี้รวบรวมโปรแกรมข้างต้นสร้าง getcookies.cgi และพยายามที่จะใช้เชื่อมโยงต่อไปที่จะได้รับคุกกี้ทั้งหมดที่มีอยู่บนคอมพิวเตอร์ของคุณ:

/cgi-bin/getcookies.cgi

นี้จะผลิตรายการที่แสดงทั้งหมดอีกสี่คุกกี้คุกกี้ในชุดและคอมพิวเตอร์ของคุณ:

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

ตัวอย่างของการอัปโหลดไฟล์

อัปโหลดไฟล์รูปแบบ HTML ต้อง ENCTYPE ตั้งค่าแอตทริบิวต์multipart / form ข้อมูลแท็กใส่กับประเภทของไฟล์จะสร้างปุ่ม "Browse"

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

ผลของรหัสนี้เป็นรูปแบบต่อไปนี้:

เอกสาร:

หมายเหตุ: ตัวอย่างข้างต้นได้รับการปิดการใช้งานจงใจบันทึกไว้ในเซิร์ฟเวอร์ของเราสามารถอัปโหลดไฟล์คุณสามารถลองโค้ดข้างบนเซิร์ฟเวอร์ของคุณ

ต่อไปนี้จะใช้ในการประมวลผลcpp_uploadfile.cpp อัปโหลดไฟล์สคริปต์:

#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>CGI 中的文件上传</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // 获取要被上传的文件列表
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // 在 cout 中发送数据类型
      cout << HTTPContentHeader(file->getDataType());
      // 在 cout 中写入内容
      file->writeToStream(cout);
   }
   cout << "<文件上传成功>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

ตัวอย่างข้างต้นคือการเขียนไปยังศาลกระแส แต่คุณสามารถเปิดสตรีมไฟล์และเนื้อหาของไฟล์ที่อัปโหลดในแฟ้มบนพื้นที่เป้าหมายที่