HTTP::Server::Simple::CGIの使い方
HTTP::Server::Simple::CGIのhandle_requestに渡される二つ目のパラメーターは、CGI.pmのオブジェクトです。ソースコード中の
sub handler { my $self = shift; my $cgi = new CGI(); eval { $self->handle_request($cgi) }; if ($@) { my $error = $@; warn $error; } }
で作成されてます。なので、handle_requestでは、
sub handle_request { my ($self,$q)=@_; $q->param('hoge'); $q->header; }
などとすることができますです。
ちなみに環境変数もセットしてくれるので、$ENV{'PATH_INFO'}なども取得可能です。便利。
CGI::Appなアプリケーションを動かす時は、CGI::Application用(デバッグ)サーバで書いた事とほぼ同じですが、
use base qw(HTTP::Server::Simple::CGI); use HTTP::Status; sub handle_request { my ($self,$q)=@_; local $ENV{CGI_APP_RETURN_ONLY} = 1; my $engine = MyApp->new(QUERY=>$q); my $ret = $engine->run(); my $headers = $engine->_send_headers(); my $message=200; foreach (split /\n/,$headers){ if($_ =~ /^Status:\s+(\d+)/){ $message=$1; } } print "HTTP/1.0 " . $message . " " . status_message($message) . "\015\012"; print $ret; }
でいけると思う。
Dispatchの方は、dispatchメソッドをコピーしてくるのが早いかなぁ。
コメント
にゃるほど。
そんな感じで使うのですね。
勉強になります。
宮川さんの12 Thingsでこのモジュールを知りました。
HTTP::Server::Simpleを使ってCGI::App用デバッグサーバを簡単に作れるようにすれば結構いい感じになりそうですね。
投稿者: nekokak | 2005年12月20日 22:28
HTTP::Server::Simpleは僕も宮川さんの記事で知りました。
ちなみにCatalyst::Engile::HTTPも
> Many parts are ripped out of HTTP::Server::Simple by Jesse Vincent.
なんて書かれていたりしますね。
投稿者: かぜぶろ | 2005年12月21日 17:01