2011/05/11

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

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


・HTML

  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.  <meta charset="UTF-8">  
  5.   </head>  
  6.   
  7.   <body>  
  8.  <form action="CGIへのパス" method="get">  
  9.    <input type="text" name="text1">  
  10.    <input type="text" name="text2">  
  11.   
  12.    <input type="submit" value="送信">  
  13.  </form>  
  14.   </body>  
  15. </html>  

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


・c++
  1. #include <iostream>  
  2. #include <string>  
  3.  int main()  
  4. {  
  5.  // 環境変数[REQUEST_METHOD]に送信されたメソッド[GET/POST]が入ります。  
  6.  std::string request_method = getenv( "REQUEST_METHOD" );  
  7.  std::string query_string;  
  8.   
  9.  if ( request_method == "GET" )  
  10.  {  
  11.   query_string = getenv( "QUERY_STRING" );  
  12.  }  
  13.    
  14.  cout << "Content-Type: text/html" << endl << endl;  
  15.    
  16.  cout << "<html>" << endl;  
  17.  cout << "<head><title>test</title></head>" << endl;  
  18.  cout << "<body>" << endl;  
  19.  cout << query_string << endl;  
  20.   
  21.  cout << "</body>" << endl;  
  22.  cout << "</html>" << endl;  
  23.   
  24.  return 0;  
  25. }  

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