RubyでCGIスクリプトを作る下準備・フォームデータを受け取る
標準で付いてるライブラリのcgi.rbを使えば楽そうだが、自分で作ってみる。
Perlでありがちな処理をRubyで再現。
Rubyの変数にnilがあるのを考慮しないと500 Internal Server Errorが出る。ややこしい。
#!/usr/local/bin/ruby # コンソール上のデバッグ用に環境変数をセット #ENV['CONTENT_LENGTH'] = "20" #ENV['REQUEST_METHOD'] = "POST" def decode require "kconv" $input = {} buf = STDIN.read ENV['CONTENT_LENGTH'].to_i buf.split("&").each { |str| key = str.split("=")[0] value = str.split("=")[1] if value != nil value.tr!("+", " ") value.gsub!(/%([0-9a-fA-F]{2})/) { [$1.hex].pack("C") } value = value.toeuc # 文字コードはEUC $input[key] = value end } end if ENV["REQUEST_METHOD"] == "POST" decode end print <<END Content-Type: text/html <html> <head> <title>Rubyでフォームデータをデコードするデモ</title> </head> <body> <h1>Rubyでフォームデータをデコードするデモ</h1> <hr> <form method=post> <input type=checkbox name=check> <input type=text name=text> <input type=submit> </form> END if $input != nil print "<hr>\n" print "<table border=1>\n" print "<tr><td><b>key</b></td><td><b>value</b></td></tr>\n" $input.each { |key, value| print "<tr><td>" + key + "</td><td>" + value + "</td></tr>\n" } print "</table>\n" end print <<END </body> </html> END