2011/05/11

c++でcgi ー GETメソッドでデータを受け取る

HTMLのformからGETメソッドでデータを取得してみます。


・HTML

<!DOCTYPE html>
<html>
  <head>
 <meta charset="UTF-8">
  </head>

  <body>
 <form action="CGIへのパス" method="get">
   <input type="text" name="text1">
   <input type="text" name="text2">

   <input type="submit" value="送信">
 </form>
  </body>
</html>

form内にテキスト入力欄が2つ(nameは"text1"と"text2")あり、8行目で呼び出すCGIへのパスとGETメソッドを指定しています。


・c++
#include <iostream>
#include <string>
 int main()
{
 // 環境変数[REQUEST_METHOD]に送信されたメソッド[GET/POST]が入ります。
 std::string request_method = getenv( "REQUEST_METHOD" );
 std::string query_string;

 if ( request_method == "GET" )
 {
  query_string = getenv( "QUERY_STRING" );
 }
 
 cout << "Content-Type: text/html" << endl << endl;
 
 cout << "<html>" << endl;
 cout << "<head><title>test</title></head>" << endl;
 cout << "<body>" << endl;
 cout << query_string << endl;

 cout << "</body>" << endl;
 cout << "</html>" << endl;

 return 0;
}

6行目で環境変数[REQUEST_METHOD]からGET/POSTのどちらのメソッドかを取得しています。

11行目で、GETメソッドなら環境変数[QUERY_STRING]から送信されたデータを取得しています。

[QUERY_STRING]には、送信された文字列(URLエンコードされています)が入ります。
送信された文字列はnameと内容が[=]で結ばれ、各項目が[&]で結ばれています。

formのtext1に[abc]、text2に[123]と入力して送信すると
QUERY_STRINGには[text1=abc&text2=123]という文字列が入ります。


実際に使用する時は、文字列をURLデコードし文字列を[&]と[=]で区切る必要があります。

0 コメント:

コメントを投稿

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates