工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ Web プログラミング

CGI とは?

ウェブ閲覧

CGI の概念を理解するために、ハイパーリンクをクリックして特定の Web ページまたは URL を閲覧するとどうなるか見てみましょう。

ただし、特定のディレクトリ内のファイルが要求されるたびに、そのファイルが返されないように HTTP サーバーを設定することは可能です。代わりに、プログラムとして実行され、プログラムから生成された出力がブラウザに返されて表示されます。

Common Gateway Interface (CGI) は、アプリケーション (CGI プログラムまたは CGI スクリプトと呼ばれる) が Web サーバーおよびクライアントと対話できるようにするための標準プロトコルです。これらの CGI プログラムは、Python、PERL、シェル、C、C++ などで作成できます。

CGI アーキテクチャ図

次の簡単なプログラムは、CGI の簡単なアーキテクチャを示しています −

ウェブ サーバーの構成

CGI プログラミングに進む前に、Web サーバーが CGI をサポートし、CGI プログラムを処理するように構成されていることを確認してください。 HTTP サーバーによって実行されるすべての CGI プログラムは、事前に構成されたディレクトリに保持されます。このディレクトリは CGI ディレクトリと呼ばれ、慣例により /var/www/cgi-bin と命名されます。慣例により、CGI ファイルの拡張子は .cgi になります。 ただし、C++ 実行可能ファイルです。

デフォルトでは、Apache Web サーバーは /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>

ここでは、Web サーバーが正常に稼働しており、Perl や Shell などの他の 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 - 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;
}

上記のコードをコンパイルし、実行可能ファイルに cplusplus.cgi という名前を付けます。このファイルは /var/www/cgi-bin ディレクトリに保管されており、以下の内容を持っています。 CGI プログラムを実行する前に、chmod 755 cplusplus.cgi を使用してファイルのモードが変更されていることを確認してください。 ファイルを実行可能にする UNIX コマンド

初めての CGI プログラム

上記の C++ プログラムは、その出力を STDOUT ファイル、つまり画面に書き込む単純なプログラムです。最初の行の印刷 Content-type:text/html\r\n\r\n という重要な追加機能が 1 つあります。 .この行はブラウザーに送り返され、ブラウザー画面に表示されるコンテンツ タイプを指定します。これで、CGI の基本概念が理解できたはずで、Python を使用して多くの複雑な CGI プログラムを作成できるようになりました。 C++ CGI プログラムは、RDBMS などの他の外部システムとやり取りして、情報を交換できます。

HTTP ヘッダー

Content-type:text/html\r\n\r\n コンテンツを理解するためにブラウザーに送信される HTTP ヘッダーの一部です。すべての HTTP ヘッダーは次の形式になります −

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

CGI プログラミングで頻繁に使用する重要な HTTP ヘッダーは他にほとんどありません。

Sr.No ヘッダーと説明
1

コンテンツ タイプ:

返されるファイルの形式を定義する MIME 文字列。例は Content-type:text/html です。

2

有効期限:日付

情報が無効になる日付。これは、ブラウザがいつページを更新する必要があるかを判断するために使用する必要があります。有効な日付文字列は、1998 年 1 月 1 日 12:00:00 GMT の形式である必要があります。

3

場所:URL

要求された URL の代わりに返される URL。このフィールドを使用して、要求を任意のファイルにリダイレクトできます。

4

最終更新日:日付

リソースの最終変更日。

5

内容の長さ:N

返されるデータの長さ (バイト単位)。ブラウザはこの値を使用して、ファイルの推定ダウンロード時間を報告します。

6

セット Cookie:文字列

string を介して渡された Cookie を設定します .

CGI 環境変数

すべての CGI プログラムは、次の環境変数にアクセスできます。これらの変数は、CGI プログラムを作成する際に重要な役割を果たします。

Sr.No 変数名と説明
1

CONTENT_TYPE

クライアントが添付コンテンツをサーバーに送信するときに使用される、コンテンツのデータ型。たとえば、ファイルのアップロードなど

2

CONTENT_LENGTH

POST リクエストでのみ利用可能なクエリ情報の長さ。

3

HTTP_COOKIE

設定された Cookie をキーと値のペアの形式で返します。

4

HTTP_USER_AGENT

User-Agent リクエスト ヘッダー フィールドには、リクエストを発信したユーザー エージェントに関する情報が含まれます。 Web ブラウザの名前です。

5

PATH_INFO

CGI スクリプトのパス。

6

QUERY_STRING

GET メソッド リクエストで送信される URL エンコードされた情報。

7

REMOTE_ADDR

リクエストを行っているリモート ホストの IP アドレス。これは、ログ記録や認証目的に役立ちます。

8

REMOTE_HOST

リクエストを行っているホストの完全修飾名。この情報が利用できない場合、REMOTE_ADDR を使用して IR アドレスを取得できます。

9

REQUEST_METHOD

リクエストの作成に使用されたメソッド。最も一般的なメソッドは GET と POST です。

10

SCRIPT_FILENAME

CGI スクリプトへのフル パス。

11

SCRIPT_NAME

CGI スクリプトの名前。

12

サーバー名

サーバーのホスト名または IP アドレス。

13

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 Environment Variables</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ ) {
      cout << "<tr><td>" << ENV[ i ] << "</td><td>";
      
      // attempt to retrieve value of environment variable
      char *value = getenv( ENV[ i ].c_str() );  
      if ( value != 0 ) {
         cout << value;                                 
      } else {
         cout << "Environment variable does not exist.";
      }
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

C++ CGI ライブラリ

実際の例では、CGI プログラムで多くの操作を行う必要があります。 ftp://ftp.gnu.org/gnu/cgicc/ からダウンロードできる C++ プログラム用に作成された CGI ライブラリがあり、手順に従ってライブラリをインストールできます −

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

「C++ CGI Lib ドキュメント」で利用可能な関連ドキュメントを確認できます。

GET および POST メソッド

ブラウザーから Web サーバー、そして最終的には CGI プログラムに情報を渡す必要がある状況に何度も遭遇したことでしょう。ほとんどの場合、ブラウザーは 2 つの方法を使用してこの情報を Web サーバーに渡します。これらのメソッドは、GET メソッドと POST メソッドです。

GET メソッドを使用して情報を渡す

GET メソッドは、エンコードされたユーザー情報をページ要求に追加して送信します。ページとエンコードされた情報は、? で区切られます。次のような文字-

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

GET メソッドは、ブラウザーから Web サーバーに情報を渡すデフォルトの方法であり、ブラウザーの Location:ボックスに表示される長い文字列を生成します。サーバーに渡すパスワードやその他の機密情報がある場合は、GET メソッドを使用しないでください。 GET メソッドにはサイズ制限があり、リクエスト文字列で最大 1024 文字を渡すことができます。

GET メソッドを使用する場合、情報は QUERY_STRING http ヘッダーを使用して渡され、QUERY_STRING 環境変数を介して CGI プログラムでアクセスできます。

キーと値のペアを任意の URL と連結するだけで情報を渡すことができます。または、HTML

タグを使用して GET メソッドを使用して情報を渡すこともできます。

簡単な URL の例:Get メソッド

これは、GET メソッドを使用して hello_get.py プログラムに 2 つの値を渡す単純な URL です。

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

以下は cpp_get.cgi を生成するプログラムです。 Web ブラウザからの入力を処理する 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>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;
}

さて、上記のプログラムを次のようにコンパイルします −

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

cpp_get.cgi を生成して CGI ディレクトリに配置し、次のリンクを使用してアクセスしてみてください −

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

これにより、次の結果が生成されます-

First name: ZARA 
Last name: ALI 

単純な FORM の例:GET メソッド

HTML FORM と送信ボタンを使用して 2 つの値を渡す簡単な例を次に示します。この入力を処理するために、同じ CGI スクリプト cpp_get.cgi を使用します。

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

上記のフォームの実際の出力を次に示します。姓名を入力し、送信ボタンをクリックして結果を確認します。

POST メソッドを使用して情報を渡す

一般に、CGI プログラムに情報を渡すより信頼性の高い方法は、POST メソッドです。これは、GET メソッドとまったく同じ方法で情報をパッケージ化しますが、? の後にテキスト文字列として送信するのではなく、 URL では、別のメッセージとして送信します。このメッセージは、標準入力の形式で CGI スクリプトに入ります。

同じ cpp_get.cgi プログラムが POST メソッドも処理します。 HTML FORMと送信ボタンを使用して2つの値を渡す上記と同じ例を見てみましょうが、今回は次のようにPOSTメソッドを使用します-

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

上記のフォームの実際の出力を次に示します。姓名を入力し、送信ボタンをクリックして結果を確認します。

チェックボックス データを CGI プログラムに渡す

チェックボックスは、複数のオプションを選択する必要がある場合に使用されます。

2 つのチェックボックスがあるフォームの HTML コードの例を次に示します −

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

このコードの結果は次の形式です −

以下は C++ プログラムで、cpp_checkbox.cgi スクリプトを生成して、チェックボックス ボタンを介して 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;
   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;
}

ラジオ ボタン データを CGI プログラムに渡す

ラジオ ボタンは、1 つのオプションのみを選択する必要がある場合に使用されます。

2 つのラジオ ボタンを持つフォームの HTML コードの例を次に示します −

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

このコードの結果は次の形式です −

以下は C++ プログラムで、cpp_radiobutton.cgi スクリプトを生成して、ラジオ ボタンを介して 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>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;
}

テキスト領域データを CGI プログラムに渡す

TEXTAREA 要素は、複数行のテキストを CGI プログラムに渡す必要がある場合に使用されます。

TEXTAREA ボックスを含むフォームの HTML コードの例を次に示します −

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

このコードの結果は次の形式です −

以下は C++ プログラムで、cpp_textarea.cgi スクリプトを生成して、テキスト領域を介して 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>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;
}

ドロップダウン ボックスのデータを CGI プログラムに渡す

ドロップ ダウン ボックスは、利用可能なオプションが多数ある場合に使用されますが、選択されるのは 1 つまたは 2 つだけです。

ドロップダウン ボックスが 1 つあるフォームの HTML コードの例を次に示します −

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

このコードの結果は次の形式です −

以下は C++ プログラムで、cpp_dropdown.cgi スクリプトを生成して、ドロップダウン ボックスを介して 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>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;
}

CGI での Cookie の使用

HTTP プロトコルはステートレス プロトコルです。ただし、商用 Web サイトの場合、異なるページ間でセッション情報を維持する必要があります。たとえば、1 つのユーザー登録は、多くのページを完了すると終了します。しかし、すべての Web ページでユーザーのセッション情報を維持する方法.

多くの場合、Cookie の使用は、設定、購入、コミッション、および訪問者のエクスペリエンスやサイト統計の向上に必要なその他の情報を記憶および追跡する最も効率的な方法です。

仕組み

サーバーは、一部のデータを Cookie の形式で訪問者のブラウザに送信します。ブラウザは Cookie を受け入れる場合があります。その場合、訪問者のハード ドライブにプレーン テキスト レコードとして保存されます。これで、訪問者がサイトの別のページに到達したときに、Cookie を取得できるようになります。取得すると、サーバーは何が保存されたかを認識/記憶します。

Cookie は、5 つの可変長フィールドのプレーン テキスト データ レコードです −

    <リ>

    期限切れ − これは、Cookie の有効期限が切れる日付を示します。これが空白の場合、訪問者がブラウザを終了すると Cookie は期限切れになります。

    <リ>

    ドメイン − サイトのドメイン名を表示します。

    <リ>

    パス − これは、Cookie を設定したディレクトリまたは Web ページへのパスを示します。任意のディレクトリまたはページから Cookie を取得する場合は、空白にすることができます。

    <リ>

    安全 - このフィールドに「secure」という単語が含まれている場合、cookie はセキュアなサーバーでのみ取得できます。このフィールドが空白の場合、そのような制限はありません。

    <リ>

    名前 =値 − Cookie は、キーと値のペアの形式で設定および取得されます。

Cookie の設定

Cookie をブラウザに送信するのは非常に簡単です。これらの Cookie は、Content-type がファイルされる前に HTTP ヘッダーと共に送信されます。 UserID と Password を Cookie として設定するとします。ということで、Cookieの設定は以下のように行います

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

この例から、Cookie の設定方法を理解しているはずです。 Set-Cookie を使用しています Cookie を設定するための HTTP ヘッダー。

ここでは、Expires、Domain、Path などの Cookie 属性の設定はオプションです。マジック ライン "Content-type:text/html\r\n\r\n を送信する前に Cookie が設定されることは注目に値します .

上記のプログラムをコンパイルして setcookies.cgi を生成し、次のリンクを使用して Cookie の設定を試みます。コンピューターに 4 つの Cookie を設定します −

/cgi-bin/setcookies.cgi

Cookie の取得

設定されたすべての Cookie を簡単に取得できます。 Cookie は CGI 環境変数 HTTP_COOKIE に保存され、次の形式になります。

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

以下は、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;
}

上記のプログラムをコンパイルして getcookies.cgi を生成し、コンピュータで利用可能なすべての Cookie のリストを取得してみてください −

/cgi-bin/getcookies.cgi

これにより、前のセクションで設定された 4 つの Cookie すべてと、コンピューターに設定された他のすべての Cookie のリストが生成されます −

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

ファイルのアップロードの例

ファイルをアップロードするには、HTML フォームの enctype 属性を multipart/form-data に設定する必要があります .ファイル タイプの入力タグにより、[参照] ボタンが作成されます。

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

このコードの結果は次の形式です −

注意 − 上記の例は、ユーザーがサーバーにファイルをアップロードするのを防ぐために意図的に無効にされています。ただし、サーバーで上記のコードを試すことができます。

これがスクリプト 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>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;
}

上記の例は、cout にコンテンツを書き込むためのものです ただし、ファイル ストリームを開いて、アップロードされたファイルのコンテンツを目的の場所のファイルに保存できます。

このチュートリアルをお楽しみいただけたでしょうか。はいの場合は、フィードバックをお送りください。


C言語

  1. C# プログラミングの名前空間
  2. C++ 演算子
  3. C++ コメント
  4. C++ プログラミングで配列を関数に渡す
  5. C チュートリアル
  6. C++ の概要
  7. C++ 定数/リテラル
  8. C++ の演算子
  9. C++ の数値
  10. C++ リファレンス
  11. C++ テンプレート