Webにもたらす最も簡単なインタラクションモデルは、入力を前もって受け取り、で出力を生成するアプリケーションですstdout
。この状況では、未知のポスターが述べたように、 CGIを使用できます。ただし、CGIの性質上、これは(最も単純な意味で)すべての情報がユーザーから1ページで収集され、アプリケーションに送信され、結果が1ページで返される場合にのみ機能します。これは、CGIを使用してページを呼び出すたびに、要求を処理するための新しい独立したプロセスが生成されるためです。( FastCGIなど、他にも効率的なソリューションがありますアプリケーションがインタラクティブである場合、いくつかの情報を収集し、いくつかの結果を提示し、いくつかのオプションを出力し、さらにいくつかのユーザー入力を収集し、さらに多くの結果を生成するという点で、アプリケーションを適応させる必要があります。
これは、C++で可能な最も単純なCGIプログラムについてです。
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "Content-type: text/plain\n" << std::endl;
std::cout << "Hello, CGI World!" << std::endl;
}
コンテンツタイプに続いて空白行を返し、次に通常の退屈な挨拶で実際のコンテンツを返すだけです。
ユーザー入力を受け入れるには、フォームをHTMLで記述し、POST
ターゲットはアプリケーションになります。通常のHTTPスタイルで、リクエストのパラメータを含む文字列が渡されます。
foo.cgi?QTY=123&N=41&DESC=Simple+Junk
次に、クエリ文字列(環境変数を介してプログラムに渡される)を解析してQUERY_STRING
、フォームから入力フィールドを収集し、アプリケーションに渡す必要があります。パラメータ文字列の解析は多数のセキュリティエクスプロイトの原因であるため、注意してください。解析を行うC++用のCGIライブラリ(Google検索で多くのことがわかります)を見つけることは間違いなく価値があります。クエリデータは次の方法で取得できます。
const char* data = getenv("QUERY_STRING");
したがって、少なくとも、name=value
ペアのクエリ文字列からの入力を受け入れるようにアプリケーションを変更する必要があります。必要がなければ、HTMLを生成する必要さえありません。text/plain
そもそもコンテンツタイプを返すだけです。その後、HTMLを使用して改善できます(それに応じてコンテンツタイプを変更できます)。
WtなどのWebフレームワーク全体を含む、他のより洗練されたソリューションがあります。しかし、それはあなたが避けたいとあなたが言ったあなたのアプリへのかなりの変更を伴うでしょう。