Cplusplus-cpp-web-programming
C ++ Webプログラミング
CGIとは何ですか?
- Common Gateway Interface(CGI)は、Webサーバーとカスタムスクリプト間で情報を交換する方法を定義する一連の標準です。
- CGIの仕様は現在NCSAによって維持されており、NCSAは次のようにCGIを定義しています-
- Common Gateway Interface(CGI)は、HTTPサーバーなどの情報サーバーとインターフェイスする外部ゲートウェイプログラムの標準です。
- 現在のバージョンはCGI/1.1で、CGI/1.2は進行中です。
ウェブブラウジング
CGIの概念を理解するために、ハイパーリンクをクリックして特定のWebページまたはURLを参照するとどうなるかを見てみましょう。
- ブラウザはHTTP Webサーバーに接続し、URLを要求します。 ファイル名。
- WebサーバーはURLを解析し、ファイル名を探します。 要求されたファイルが見つかった場合、Webサーバーはそのファイルをブラウザに送信します。それ以外の場合は、間違ったファイルを要求したことを示すエラーメッセージを送信します。
- WebブラウザはWebサーバーからの応答を受け取り、受信した応答に基づいて、受信したファイルまたはエラーメッセージを表示します。
ただし、特定のディレクトリ内のファイルが要求されるたびに、そのファイルが送り返されないようにHTTPサーバーを設定することは可能です。代わりに、プログラムとして実行され、プログラムから生成された出力がブラウザに送り返されて表示されます。
Common Gateway Interface(CGI)は、アプリケーション(CGIプログラムまたはCGIスクリプトと呼ばれる)がWebサーバーおよびクライアントと対話できるようにするための標準プロトコルです。 これらのCGIプログラムは、Python、PERL、シェル、CまたはC ++などで作成できます。
CGIアーキテクチャ図
次の単純なプログラムは、CGIの単純なアーキテクチャを示しています-
Webサーバーの構成
CGIプログラミングを進める前に、WebサーバーがCGIをサポートし、CGIプログラムを処理するように構成されていることを確認してください。 HTTPサーバーによって実行されるすべてのCGIプログラムは、事前に構成されたディレクトリに保持されます。 このディレクトリはCGIディレクトリと呼ばれ、慣例により/var/www/cgi-binと名付けられます。 慣例により、CGIファイルの拡張子は .cgi になりますが、C ++実行可能ファイルです。
デフォルトでは、Apache Webサーバーは/var/www/cgi-binでCGIプログラムを実行するように構成されています。 CGIスクリプトを実行する他のディレクトリを指定する場合は、httpd.confファイルの次のセクションを変更できます-
ここでは、Webサーバーが正常に起動して実行されており、PerlやShellなどの他のCGIプログラムを実行できると想定しています。
最初のCGIプログラム
次のC ++プログラムの内容を考慮してください-
上記のコードをコンパイルし、実行可能ファイルに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ヘッダーは次の形式になります-
CGIプログラミングで頻繁に使用する他の重要なHTTPヘッダーはほとんどありません。
Sr.No | Header & Description |
---|---|
1 |
Content-type: 返されるファイルの形式を定義するMIME文字列。 例は、Content-type:text/htmlです。 |
2 |
Expires: Date 情報が無効になる日付。 これは、ブラウザがページを更新する必要がある時期を決定するために使用する必要があります。 有効な日付文字列は、1998年1月1日12:00:00 GMTの形式である必要があります。 |
3 |
Location: URL 要求されたURLの代わりに返されるURL。 このフィールドを使用して、要求を任意のファイルにリダイレクトできます。 |
4 |
Last-modified: Date リソースの最終変更日。 |
5 |
Content-length: N 返されるデータの長さ(バイト単位)。 ブラウザはこの値を使用して、ファイルの推定ダウンロード時間を報告します。 |
6 |
Set-Cookie: String _string_を介して渡されるCookieを設定します。 |
CGI環境変数
すべてのCGIプログラムは、次の環境変数にアクセスできます。 これらの変数は、CGIプログラムの作成中に重要な役割を果たします。
Sr.No | Variable Name & Description |
---|---|
1 |
CONTENT_TYPE クライアントが添付コンテンツをサーバーに送信するときに使用されるコンテンツのデータ型。 たとえば、ファイルのアップロードなど。 |
2 |
CONTENT_LENGTH POST要求でのみ使用可能なクエリ情報の長さ。 |
3 |
HTTP_COOKIE 設定されたCookieをキーと値のペアの形式で返します。 |
4 |
HTTP_USER_AGENT User-Agent request-headerフィールドには、リクエストを発信したユーザーエージェントに関する情報が含まれています。 これは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 |
SERVER_NAME サーバーのホスト名またはIPアドレス。 |
13 |
SERVER_SOFTWARE サーバーが実行しているソフトウェアの名前とバージョン。 |
すべてのCGI変数をリストする小さなCGIプログラムを次に示します。
C ++ CGIライブラリ
実際の例では、CGIプログラムで多くの操作を行う必要があります。 あなたはftp://ftp.gnu.org/gnu/cgicc/からダウンロードすることができ、ライブラリをインストールする手順に従ってくださいC ++プログラム用に書かれたCGIライブラリがあります-
‘C++ CGI Lib Documentationで入手可能な関連ドキュメントを確認できます。
GETおよびPOSTメソッド
ブラウザからWebサーバーに、そして最終的にはCGIプログラムに何らかの情報を渡す必要がある場合、多くの状況に遭遇したに違いありません。 ほとんどの場合、ブラウザはこの情報をWebサーバーに渡すために2つの方法を使用します。 これらのメソッドは、GETメソッドとPOSTメソッドです。
GETメソッドを使用して情報を渡す
GETメソッドは、エンコードされたユーザー情報をページリクエストに追加して送信します。 ページとエンコードされた情報は、? 次のような文字-
GETメソッドは、ブラウザからWebサーバーに情報を渡すデフォルトのメソッドであり、ブラウザのLocation:boxに表示される長い文字列を生成します。 サーバーに渡すパスワードまたはその他の機密情報がある場合は、GETメソッドを使用しないでください。 GETメソッドにはサイズ制限があり、リクエスト文字列で最大1024文字を渡すことができます。
GETメソッドを使用する場合、情報はQUERY_STRING httpヘッダーを使用して渡され、QUERY_STRING環境変数を介してCGIプログラムでアクセスできます。
キーと値のペアを任意のURLと連結するだけで情報を渡すことができます。または、HTML <FORM>タグを使用して、GETメソッドを使用して情報を渡すことができます。
単純なURLの例:Getメソッド
GETメソッドを使用してhello_get.pyプログラムに2つの値を渡す簡単なURLを次に示します。
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI
以下は、Webブラウザからの入力を処理する cpp_get.cgi CGIプログラムを生成するプログラムです。 渡された情報へのアクセスを非常に簡単にするC ++ CGIライブラリを使用します-
さて、次のように上記のプログラムをコンパイルします-
cpp_get.cgiを生成し、CGIディレクトリに入れて、次のリンクを使用してアクセスしてみてください-
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI
これは、次の結果を生成します-
単純なFORMの例:GETメソッド
次に、HTML FORMと送信ボタンを使用して2つの値を渡す簡単な例を示します。 この入力を処理するために、同じCGIスクリプトcpp_get.cgiを使用します。
上記のフォームの実際の出力は次のとおりです。 姓と名を入力し、送信ボタンをクリックして結果を確認します。
名前苗字:
POSTメソッドを使用して情報を渡す
CGIプログラムに情報を渡すより一般的に信頼できる方法は、POSTメソッドです。 これは、GETメソッドとまったく同じ方法で情報をパッケージ化しますが、?の後にテキスト文字列として送信する代わりに URLで別のメッセージとして送信します。 このメッセージは、標準入力の形式でCGIスクリプトに入力されます。
同じcpp_get.cgiプログラムもPOSTメソッドを処理します。 上記と同じ例を見てみましょう。HTMLFORMと送信ボタンを使用して2つの値を渡しますが、今回は次のようにPOSTメソッドを使用します-
上記のフォームの実際の出力は次のとおりです。 姓と名を入力し、送信ボタンをクリックして結果を確認します。
名前苗字:
チェックボックスデータをCGIプログラムに渡す
チェックボックスは、複数のオプションを選択する必要がある場合に使用されます。
ここに2つのチェックボックスを持つフォームのHTMLコードの例があります-
このコードの結果は次の形式です-
数学物理学
以下はC ++プログラムです。このプログラムはcpp_checkbox.cgiスクリプトを生成し、Webブラウザからチェックボックスボタンを介して与えられた入力を処理します。
ラジオボタンデータをCGIプログラムに渡す
オプションを1つだけ選択する必要がある場合は、ラジオボタンが使用されます。
これは、2つのラジオボタンがあるフォームのHTMLコードの例です-
このコードの結果は次の形式です-
数学物理学
以下はC ++プログラムです。このプログラムはcpp_radiobutton.cgiスクリプトを生成して、Webブラウザからラジオボタンを介して与えられた入力を処理します。
テキスト領域データをCGIプログラムに渡す
TEXTAREA要素は、複数行のテキストをCGIプログラムに渡す必要がある場合に使用されます。
以下は、TEXTAREAボックスを持つフォームのHTMLコードの例です-
このコードの結果は次の形式です-
以下はC ++プログラムで、cpp_textarea.cgiスクリプトを生成して、Webブラウザからテキスト領域を介して与えられた入力を処理します。
ドロップダウンボックスデータをCGIプログラムに渡す
ドロップダウンボックスは、多くのオプションを使用できますが、選択されるのは1つまたは2つだけの場合です。
これは、1つのドロップダウンボックスがあるフォームのHTMLコードの例です-
このコードの結果は次の形式です-
数学物理学
以下はC ++プログラムで、cpp_dropdown.cgiスクリプトを生成して、Webブラウザからドロップダウンボックスを介して与えられた入力を処理します。
CGIでのCookieの使用
HTTPプロトコルはステートレスプロトコルです。 ただし、商用Webサイトの場合は、異なるページ間でセッション情報を維持する必要があります。 たとえば、多くのページを完了すると、1人のユーザー登録が終了します。 しかし、すべてのWebページにわたってユーザーのセッション情報を維持する方法。
多くの場合、Cookieの使用は、ユーザーの利便性やサイトの統計情報を改善するために必要な設定、購入、手数料、その他の情報を記憶および追跡する最も効率的な方法です。
使い方
サーバーは、Cookieの形式で訪問者のブラウザにデータを送信します。 ブラウザはCookieを受け入れる場合があります。 存在する場合、訪問者のハードドライブにプレーンテキストレコードとして保存されます。 これで、訪問者がサイトの別のページに到達すると、Cookieを取得できます。 取得されると、サーバーは保存された内容を認識/記憶します。
クッキーは5つの可変長フィールドのプレーンテキストデータレコードです-
- 有効期限-これは、Cookieの有効期限が切れる日付を示します。 これが空白の場合、訪問者がブラウザを終了すると、Cookieは期限切れになります。
- ドメイン-これはサイトのドメイン名を示します。
- パス-これは、Cookieを設定するディレクトリまたはWebページへのパスを示します。 任意のディレクトリまたはページからCookieを取得する場合、これは空白になる場合があります。
- 安全-このフィールドに「安全」という単語が含まれている場合、Cookieは安全なサーバーでのみ取得できます。 このフィールドが空白の場合、そのような制限はありません。
- 名前=値-Cookieはキーと値のペアの形式で設定および取得されます。
クッキーを設定する
クッキーをブラウザに送信するのは非常に簡単です。 これらのCookieは、コンテンツタイプが提出される前にHTTPヘッダーとともに送信されます。 ユーザーIDとパスワードをCookieとして設定するとします。 クッキーの設定は次のように行われます
この例から、Cookieの設定方法を理解している必要があります。 Set-Cookie HTTPヘッダーを使用して、Cookieを設定します。
ここでは、Expires、Domain、PathなどのCookie属性を設定することはオプションです。 マジックライン "Content-type:text/html \ r \ n \ r \ n を送信する前にCookieが設定されていることは注目に値します。
上記のプログラムをコンパイルしてsetcookies.cgiを作成し、次のリンクを使用してCookieを設定してください。 それはあなたのコンピューターで4つのクッキーを設定します-
/cgi-bin/setcookies.cgi
Cookieを取得する
設定されたすべてのCookieを簡単に取得できます。 クッキーはCGI環境変数HTTP_COOKIEに保存され、次の形式になります。
Cookieを取得する方法の例を次に示します。
さて、上記のプログラムをコンパイルしてgetcookies.cgiを作成し、コンピューターで利用可能なすべてのCookieのリストを取得してください-
/cgi-bin/getcookies.cgi
これにより、前のセクションで設定された4つのすべてのCookieとコンピューターに設定された他のすべてのCookieのリストが生成されます-
ファイルアップロードの例
ファイルをアップロードするには、HTMLフォームのenctype属性を multipart/form-data に設定する必要があります。 ファイルタイプの入力タグは、「参照」ボタンを作成します。
このコードの結果は次の形式です-
ファイル:
注意-上記の例は、サーバーへのファイルのアップロードを停止するために意図的に無効にされています。 ただし、サーバーで上記のコードを試すことができます。
ファイルのアップロードを処理するスクリプト cpp_uploadfile.cpp は次のとおりです-
上記の例は、 cout ストリームでコンテンツを書き込むためのものですが、ファイルストリームを開いて、アップロードしたファイルのコンテンツを目的の場所のファイルに保存できます。
このチュートリアルをお楽しみください。 はいの場合は、フィードバックをお送りください。