1

私はC CGIプログラムを書いています

GET リクエストの場合、すべての情報が何らかの形で getenv() に格納されていると想定しています。私の質問は、この配列が Web サーバーからの最も基本的な CGI 要求のように見えることです。username= と password= などの 2 つのパラメーターを使用します。

POST リクエストについては、よくわかりません。標準入力で処理されることを読みました。(Web サーバーから) 標準入力を介して CGI プログラムに渡されるこれらの行はどのようなものですか?

詳細な RFC を指摘しても役に立ちません。

何か本?プロトコルの低レベルの詳細に特に興味があります。ヘルパー ライブラリを使用して CGI アプリを作成する方法は既に知っています。これらのヘルパー ライブラリのセマンティクスを知る必要があるだけです。

4

1 に答える 1

3

envpは標準ではありません (とにかく、ISO C または C++ 標準ではありませんが、POSIX には何かがあるかもしれません)。

ただし、それを制限するための制御がないことenvpを除けば、ほとんど同じ形式です。argvargc

それぞれが が環境変数名でがその値でenvp[x]ある形式"key=value"になります。驚くべきことに :-)keyvalue

次のような NULL ポインターを取得するまで、要素を順番に処理する必要があります。

#include <stdio.h>
int main (int argc, char *argv[], char *envp[]) {
    int i = 0;
    while (envp[i] != NULL)
        printf ("[%s]\n", envp[i++]);
    return 0;
}

CGIのウィキペディアのエントリでは、詳細な RFC のように情報が多すぎないように、詳細を説明しています。

関連するものをコピーして、この回答を自己完結型にします:

  • サーバー固有の変数:
    • SERVER_SOFTWARE — HTTP サーバーの名前/バージョン。
    • SERVER_NAME — サーバーのホスト名。ドット 10 進数の IP アドレスの場合があります。
    • GATEWAY_INTERFACE — CGI/バージョン。
  • 特定の変数をリクエストします。
    • SERVER_PROTOCOL — HTTP/バージョン。
    • SERVER_PORT — TCP ポート (10 進数)。
    • REQUEST_METHOD — HTTP メソッドの名前 (上記参照)。
    • PATH_INFO — プログラム名とスラッシュの後に URL に追加された場合のパス サフィックス。
    • PATH_TRANSLATED — PATH_INFO が存在する場合、サーバーが想定する対応するフル パス。
    • SCRIPT_NAME — プログラムへの相対パス (/cgi-bin/script.cgi など)。
    • QUERY_STRING — URL の ? の後の部分 キャラクター。HTML application/x-www-form-urlencoded で定義されているように、GET メソッドを介して転送されたフォーム データを送信するために使用される場合、アンパサンドで区切られた *name=value ペア (var1=val1&var2=val2… など) で構成される場合があります。
    • REMOTE_HOST — クライアントのホスト名。サーバーがそのようなルックアップを実行しなかった場合は設定解除されます。
    • REMOTE_ADDR — クライアントの IP アドレス (ドット 10 進数)。
    • AUTH_TYPE — 識別タイプ (該当する場合)。
    • 特定の AUTH_TYPE に使用される REMOTE_USER。
    • REMOTE_IDENT — サーバーがそのようなルックアップを実行した場合にのみ、ident を参照してください。
    • CONTENT_TYPE — PUT または POST メソッドが使用されている場合の入力データの MIME タイプ (HTTP ヘッダー経由で提供)。
    • CONTENT_LENGTH — 同様に、HTTP ヘッダー経由で提供された場合の入力データのサイズ (10 進数、オクテット)。
    • ユーザー エージェント (HTTP_ACCEPT、HTTP_ACCEPT_LANGUAGE、HTTP_USER_AGENT、HTTP_COOKIE など) によって渡される変数には、対応する HTTP ヘッダーの値が含まれているため、意味は同じです。

その詳細レベルを超えて、おそらくRFC を調べなければならないでしょう。Google で RFC3875 を検索すると、それが見つかるはずです。

具体的にはPOST、環境変数は、要求の最初の空白行 (メッセージ本文を導入する行) の前に含まれます。それらの形式は次のとおりです。

Content-Type: application/wonderful_app_by_pax
Content-Length: 314159

ここで、キーは大文字と小文字が区別されず、値はコロンの後に続きます。

于 2011-05-21T02:13:26.907 に答える