CGIにGETメソッドで渡されたデータをすべて表示してみる
GETメソッドで渡されたデータをすべて表示するCGIを書いてみます。
また併せて、RubyのCGIライブラリを使ってヘッダとかも簡単に書く方法をメモしておきます。
まずは、リファレンスマニュアルの真似をしてコーディングしてみます。
#!ruby require 'cgi' cgi = CGI.new( "html3" ) # html3.2 cgi.out { cgi.html { cgi.head{ cgi.title{"[TEST CGI]"} } + cgi.body{ cgi_get_data = "GET .. " cgi.keys.each {|k| cgi_get_data += "[\"#{k}\"=>\"#{cgi[k]}\"]" } # ↓これを出力. cgi_get_data } } }
例えば、上記のコードをtest.cgiとして保存して、
http://example.com/test.cgi??t=dddd&s=Button
のように実行したら、以下のように表示されるはずです。
GET .. ["s"=>"Button"]["t"=>"dddd"]
CGIライブラリの内容を把握しつつコーディング
上記のコードでは、いまいちどういうデータの流れが起きているのか分かりにくいのですが、cgi.out や cgi.html、cgi.bodyなどは、ブロックにStringを渡す感じで書くようです。
ブロック内に式があるときには最後のStringが評価されるので、上記コードのhtml_bodyを生成しているコードでは、最後のcgi_get_dataが出力されるわけです。
次に、いちいち変数に代入しつつ、CGI.pretty()というクラスメソッドで、最終出力のHTMLも読みやすいコードにしてみます。
#!ruby require 'cgi' cgi = CGI.new( "html3" ) # html3.2 html_head = cgi.head{ cgi.title{"[TEST CGI]"} } html_body = cgi.body{ cgi_get_data = "GET .. " cgi.keys.each {|k| cgi_get_data += "[\"#{k}\"=>\"#{cgi[k]}\"]" } # ↓これを出力. cgi_get_data } html_html = cgi.html { html_head + html_body } cgi.out { CGI.pretty( html_html, "\t" ) }
ブラウザ上では変わりませんが、ソースを見てみると読みやすくなっています。