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