CGI のリクエストを扱うクラス
CGI の環境変数や CGI プログラムにアップロードされたファイル、URL のクエリーやクッキーといったクライアントからのリクエストやサーバの実行環境などのデータを CGI プログラムで扱いやすいハッシュや配列、Tenarai::CGI::Query といったオブジェクトに変換してくれるクラスです。変換されたデータへは各メソッドを経由してアクセスすることが出来ます。
以下の例では request ブロック変数が Tenarai::CGI::Request オブジェクトになります。
まずは、HTTP の GET や POST などのリクエストメソッドを取得するメソッドですが、その名も method です。HTTP のメソッド名は全て小文字に変換されています。
実行結果
Status: 200 OK Content-Type: text/plain get
CGI 環境変数へは header メソッドが返すハッシュオブジェクトまたは、[]メソッドでアクセスすることができます。環境変数の名前は全て小文字に変換されています。
なぜ環境変数の名前を小文字に変換したかというと、大文字は入力するのが面倒だからです。それから、そのままだと Tenarai::CGI::Request#header (リクエストヘッダー) のキーは全て大文字なのに、Tenarai::CGI::Response#header (レスポンスヘッダー) のキーを全て大文字にするのが一般的でないという非対称が気持悪かったのです。ここは両方小文字にして、内部で変換して気持悪くないようにしようと思ったのですが、CGI の環境変数が大文字でないという気持悪さが新たに...。結局のところ入力が楽な小文字に統一なんてどうだろうかと思い直したまま今に至ってしまいました。
あと、環境変数の名前を :request_method のようにシンボルにしようとしたこともあったのですが、Tenarai::CGI::Response#header (レスポンスヘッダー) の場合はキーの名前が content-type とか "-" がよく使われるので、こっちもシンボルにしてしまうと、それこそいちいち :"content-type" としないと対称的にならないのでやめました。
そういうことで、リクエストもレスポンスも、どちらもヘッダーを扱うハッシュのキーは文字列です。
実行結果 (実行環境によって異なります)
Status: 200 OK Content-Type: text/plain GET request_method: GET query_string: a=123&b=456&c=789 ...以下省略...
CGI のクエリー文字列や、フォームから GET で送信された文字列は query という Tenarai::CGI::Query オブジェクトを通してアクセスすることが出来ます。
- require 'tenarai/cgi'
- Tenarai::CGI.new do |request, response|
- response.code = 200
- response['content-type'] = 'text/plain'
- response.body << "query_string: %s\n" % request.header['query_string']
- response.body << "a: %s\n" % request.query['a']
- response.body << "b: %s\n" % request.query['b']
- response.body << "c: %s\n" % request.query['c']
- end
実行結果
Status: 200 OK Content-Type: text/plain query_string: a=123&b=456&c=789 a: 123 b: 456 c: 789
フォームから PUSH で送信された値やアップロードされたファイルは content という Tenarai::CGI::Query オブジェクトを通してアクセスすることが出来ます。
- require 'tenarai/cgi'
- Tenarai::CGI.new do |request, response|
- response.code = 200
- response['content-type'] = 'text/plain'
- response.body << request.content['a']
- response.body << "\n"
- response.body << request.content['file'][:filename]
- response.body << "\n"
- response.body << request.content['file'][:content_type]
- response.body << "\n"
- response.body << request.content['file'][:tmpfile]
- response.body << "\n"
- end
実行結果
ブラウザから返されたクッキーの値は cookie というTenarai::CGI::Query オブジェクトを通してアクセスすることが出来ます。
実行結果
Status: 200 OK Content-Type: text/plain http_cookie: a=123 a: 123
stdin に CGI の標準入力を env に CGI の環境変数を指定します。param には Tenarai::CGI.new と同じパラメータが指定されます。このパラメータはアップロードファイルを保存するための一時ファイルを作成するときに使われます。
HTTP のメソッド名が小文字の文字列で返されます。
ブラウザから送信されてきたクッキーの内容が Tenarai::CGI::Query オブジェクトとして返されます。
URL のクエリー文字列が Tenarai::CGI::Query オブジェクトとして返されます。
CGI の環境変数がハッシュオブジェクトとして返されます。
key で指定された名前の CGI 環境変数の値が返されます。
HTTP POST で送信されたフォームの内容やアップロードされたファイルの情報が Tenarai::CGI::Query オブジェクトとして返されます。
content のエイリアスです。
[PageInfo]
LastUpdate: 2008-04-16 19:12:18, ModifiedBy: junkikuchi
[Permissions]
view:all, edit:members, delete/config:members