Latest web development tutorials

C ++ برمجة الويب

ما هو CGI؟

  • واجهة العبارة الشائعة (CGI)، هو المعيار الذي يحدد كيفية تبادل المعلومات بين خادم الويب والبرمجة من جانب العميل.
  • ويحتفظ مواصفات CGI حاليا من قبل CGI التقييم الذاتي، التقييم الذاتي وتعرف على النحو التالي:
  • واجهة العبارة الشائعة (CGI)، هي بوابة للبرامج الخارجية مع خوادم المعلومات (مثل ملقم HTTP) واجهة لرسو السفن القياسية.
  • الإصدار الحالي هو CGI / 1.1، CGI / 1.2 نسخة تتقدم.

متصفح الويب

إلى فهم أفضل لمفهوم CGI، دعونا فوق ارتباط تشعبي، استعراض صفحة أو URL محددة، ونرى ما سيحدث.

  • يربط متصفحك على ملقم ويب HTTP ويطلب عنوان URL، وهذا هو اسم الملف.
  • خادم الويب يحل URL، والعثور على اسم الملف. إذا وجدت الملف المطلوب، سوف يرسل ملقم ويب الملف مرة أخرى إلى المتصفح، وإلا إرسال رسالة خطأ تشير إلى أنك تطلب الملف خاطئ.
  • متصفح الويب للحصول على رد من ملقم ويب، وبناء على ردود الفعل التي تلقيناها لعرض ملف أو رسالة خطأ.

ومع ذلك، في مثل هذه الطريقة لبناء خادم HTTP، بغض النظر عن متى طلب دليل ملف، الملقم HTTP لا يرسلون الملف، ولكن في شكل تنفيذ البرنامج وتنفيذ الإخراج التي تم إنشاؤها يتم إرسالها مرة أخرى إلى الشاشة متصفح بها.

واجهة العبارة الشائعة (CGI)، هو جعل تطبيق (وتسمى برامج CGI أو البرامج النصية CGI) للعمل مع ملقمات ويب وعملاء تتفاعل البروتوكولات القياسية. ويمكن لهذه البرامج CGI استخدام بايثون، بيرل، شل، C أو C ++، وما إلى ذلك لإعداد.

CGI الرسم البياني

يبين الرسم التوضيحي التالي العمارة CGI:

العمارة CGI

تكوين ملقم ويب

قبل إجراء البرمجة CGI، تأكد من أن ملقم ويب يدعم CGI، وتم تكوين للتعامل مع برامج CGI. جميع برامج CGI تنفيذها من قبل الملقم HTTP، لا بد من دليل تهيئتها مسبقا. دعا دليل CGI هذا الدليل، من خلال اتفاقية اسمه / فار / على شبكة الاتصالات العالمية / المجموعة الاستشارية لاندونيسيا بن. على الرغم من أن CGI الملف القابل للتنفيذ هو C ++، ولكن من خلال اتفاقية، هو.cgi التمديد.

افتراضيا، يتم تكوين ملقم ويب أباتشي للتشغيل في / فار / على شبكة الاتصالات العالمية / المجموعة الاستشارية لاندونيسيا بن في برنامج 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، مثل بيرل أو شل وما شابه ذلك.

برنامج 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، ويتم حفظ هذا الملف في / فار / على شبكة الاتصالات العالمية / الدليل-CGI بن. قبل تشغيل برنامج CGI، يرجى استخدامشمود 755 cplusplus.cgi يونيكس الأوامر لتغيير وضع ملف، تأكد من أن الملف غير قابل للتنفيذ.الملف القابل للتنفيذ من الوصول، سوف تشاهد الإخراج التالي:

مرحبا العالم! هذه هي المرة الأولى برنامج CGI

البرنامج المذكور أعلاه C ++ هو برنامج بسيط، انها مكتوبة على ملف الإخراج STDOUT يتم عرضها على الشاشة. هنا، تجدر الإشارة إلى أن السطر الأول من إخراجنوع المحتوى: نص / HTML \ ص \ ن \ ص \ ن.يتم إرسال هذا الخط إلى المستعرض، ومتجهة للظهور في نوع المتصفح محتوى النافذة. يجب أن نفهم المفاهيم الأساسية لمبادرة كلينتون، وذلك لزيادة استخدام بايثون لكتابة برنامج CGI أكثر تعقيدا. ويمكن استخدام برنامج CGI C ++ مع أي أنظمة أخرى خارجية (مثل RDBMS) للتفاعل.

معلومات رأس HTTP

خطنوع المحتوى: نص / HTML \ ص \ ن \ ص \ ن هو جزء لا يتجزأ من معلومات رأس 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 ++ وCGI ليب وثائق ، عرض وثائق المكتبة.

الحصول على وظيفة طرق

كنت قد واجهت مثل هذه الحالة، عندما تحتاج إلى تمرير بعض المعلومات من المتصفح إلى خادم الويب، ومرت في النهاية إلى برنامج CGI. عادة المتصفحات طريقتان لاستخدام هذه المعلومات إلى ملقم ويب وGET و POST الأساليب.

استخدام الأسلوب GET لتمرير المعلومات

الحصول على طريقة لإرسال معلومات المستخدم المشفرة إلحاق طلب الصفحة. الصفحات والمعلومات المشفرة مفصولة الطابع، على النحو التالي ؟:

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

طريقة GET هي الطريقة الافتراضية من المستعرض لنقل المعلومات خادم الويب، فمن يتم إنشاء سلسلة طويلة من سلسلة في شريط عنوان المتصفح. عندما كلمة المرور أو غيرها من المعلومات الحساسة التي تمرر إلى الخادم، لا تستخدم طريقة GET. يقتصر الحصول الأسلوب في الحجم، في سلسلة طلب نقل ما يصل إلى 1024 حرفا.

عند استخدام طريقة GET هو استخدام رأس HTTP QUERY_STRING لنقل المعلومات، استخدام متغير البيئة QUERY_STRING في برامج CGI الوصول إليها.

يمكنك مواكبة المفتاح في URL اتصال بسيط، يمكنك أيضا استخدام HTML طريقة GET <form> العلامة لنقل المعلومات.

أمثلة 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 

ومن الأمثلة على نموذج بسيط: GET طريقة

هنا مثال بسيط، وذلك باستخدام نماذج 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>

هنا هو الانتاج الفعلي للنموذج، أدخل الاسم الأول والأخير، ثم انقر على زر تقديم لعرض النتائج.

استخدام الأسلوب POST لنقل المعلومات

وهناك طريقة أكثر موثوقية من تمرير المعلومات إلى برنامج CGI هو طريقة POST. هذه الطريقة في التعبئة والتغليف المعلومات مع أسلوب GET بنفس الطريقة، إلا أنها ليست رسالة كسلسلة نصية في URL؟ بعد أن مرت، ولكن وضعه في رسالة منفصلة في شكل التسليم. يتم تمرير الرسالة إلى الإدخال القياسي في شكل نصوص CGI.

ونحن أيضا استخدام cpp_get.cgi للتعامل مع طريقة POST. لنأخذ نفس المثال، لتمرير من خلال استخدام نماذج HTML وتقديم زر قيمتين، ولكن هذه المرة نحن لا تستخدم طريقة GET، ولكن الأسلوب POST، على النحو التالي:

<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 التالية هو شكل مع اثنين من خانات:

<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 التالية هو شكل مع اثنين من أزرار الراديو:

<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 عند الحاجة إلى نقل عدة أسطر من النص، ونحن نستخدم عنصر TEXTAREA.

المثال رمز HTML التالية هو شكل مع مربع 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>

فإن البرنامج التالي 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 تعيين ملف تعريف الارتباط لملفات تعريف الارتباط.

وفيما يلي بعض الخصائص لوضع الكوكيز هو اختياري، مثل انتهاء مدة الصلاحية، المجال والمسار. ومن الجدير بالذكر، يتم إرسال الكوكيز في خط"نوع المحتوى: نص / HTML \ ص \ ن \ ص \ نقبل أن يتم تعيينها.

ترجمة البرنامج المذكور أعلاه الذي يولد 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 السمة المحددةلمتعددة / استمارة البيانات.وإدخال البطاقة مع نوع ملف إنشاء زر "استعراض".

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

المثال أعلاه هو أن يكتب إلىcout تيار، ولكن يمكنك فتح ملف تيار، ومحتويات الملف الذي تم تحميله في ملف على موقع الهدف.