nDiki : HTTP::Request
スポンサード リンク
Related term
2004年6月7日 (月)
■ ハイパー日記システム と Log::Log4perl

朝、Naney's Diary をチェックしたらエラーが出てしまっている。 昨日 WiKicker をアップデートした事による影響か。
チェックしたところ、hns ではライブラリに HTTP というパッケージがありその中で Request サブルーチンが定義されていた。 これが HTTP::Request モジュールと被っており、今回 WiKicker の更新で間接的に使用されることになった Log::Log4perl の中での new HTTP::Request と衝突する事に。
名前空間大事。
hns の方の HTTP::Request サブルーチンはそのパッケージ内でしか呼ばれていないようなので、HTTP::RequestSub と名前を変更して対処。
- WiKicker 0.30 リリース - トップページのページ名を変更でき... (2006-05-22)
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
- WiKicker における PageName 最長文字数 (2006-06-10)
2004年9月14日 (火)
■ XMLRPC::Lite + 自前の HTTP::Daemon サーバ

既に HTTP::Daemon で作成されているHTTPサーバで、XML-RPC インタフェースを提供したい。 前回のチェックで XMLRPC::Lite を使う事にした(RPC::XML は ActivePerl 5.6.1 build638 でテストが通らない)。 このパッケージで用意されているサーバ向けモジュールは、主に単独CGI プログラムで使うモジュールと、自前で HTTP::Daemon をまわすサーバタイプ。
そのままでは使えないので、以下のように。
- XMLRPC::Transport::HTTP::CGI のサブクラスを作成し、handle をオーバライドする。中身は SOAP::Transport::HTTP::Server::handle を呼ぶだけ (SUPER::handle では駄目)。
- XML-RPC リクエストがきたら、上記インスタンスの request メソッドで HTTP::Request オブジェクトを渡す。
- handle を実行。
- response メソッドで HTTP::Response を受け取り、クライアントに送信。
handle メソッドで入出力をさせないようにするのがポイント。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- HTTP::Daemonベースのプログラムのテスト (2004-11-26)
- RPC::XML のかわりに XMLRPC::Lite (2004-08-31)
- www.naney.org に「友人・知人に紹介メール」ページを新設 (2000-12-27)
- HTTP::Daemon - パイプが切断されました (2004-06-29)
2006年2月18日 (土)
■ Perl CGI プログラムのテストには WWW::Mechanize::CGI を

CGI プログラムを書いていて、いつも困るのがリグレッションテスト。
パッケージのビルド時に実行するテストスーツ (make check / make test 用テストプログラム群) に含めておきたいが、さすがにその場で Web サーバの下へセットアップするわけにもいかない。 ミニ Web サーバを同梱してテストスーツ内で起動する方法はちょっとおおがかかりだし、ポート番号の選択やらサーバの停止の問題もあって、かなり面倒。
結局、テストスーツの中で環境変数や標準入力など CGI リクエスト環境をセットアップして、CGI プログラムを実行するという王道(?)かつ泥臭いテストを書くことになったりする。
何かいいものはないかと探していたところ、WWW::Mechanize::CGI というものをみつけた。
LWP::UserAgent を継承した WWW::Mechanize モジュールは Web ブラウジングを容易にする有名どころのモジュールである。
WWW::Mechanize::CGI モジュールはさらにこれを拡張したモジュールで、HTTP リクエストを、仮想的に CGI プログラムやサブルーチンへの呼出しにしてくれる。 これを用いるとあたかも Web サーバ上の CGI プログラムにリクエストしレスポンスを受けとっているかのように、テストプログラムを書くことができる。
素晴しい。
さっそく WiKicker のテストを書き換えてみた:
use Test::More tests => 2;
use WiKicker::WikICGI::Controller;
use WWW::Mechanize::CGI;
use File::Temp qw(tempdir);
use File::Spec;
my $www_dir = tempdir(CLEANUP => 1);
my $mech = WWW::Mechanize::CGI->new;
$mech->cgi(sub {
$ENV{PATH_INFO} = '' if $ENV{PATH_INFO} eq '/';
WiKicker::WikiCGI::Controller->new->run});
$mech->env($mech->env,
SCRIPT_FILENAME => File::Spec
->catfile($www_dir . '/wiki'),
SCRIPT_NAME => '/wiki');
my $response = $mech->get('http://localhost/wiki');
ok($response->is_success);
like($response->content,
qr|<title>WikiForum\[WiKicker\]: FrontPage</title>|);
WWW::Mechanize::CGI オブジェクトを new した後、cgi メソッドで CGI サブルーチンを指定するか、cgi_application メソッドで外部 CGI プログラムを指定する。 ここでは直接、CGI サブルーチン (WiKicker::WikiCGI::Controller->new->run を実行)を指定した。
なおここで WWW::Mechanize::CGI が使っている HTTP::Request::AsCGI 0.5 における PATH_INFO の扱いが Apache などとは違って、空でも必ず '/' が入るようになっている。 これだと WiKicker では困るので、サブルーチンのところで修正している。
後は必要ならば WWW::Mechanize::CGI::env で、追加の環境変数設定を行っておく。
セットアップが済めば通常の WWW::Mechanize と同様に get 等でリクエストを行いレスポンスを受けとることができるようになる。
いい。しばらく試してみて不具合がなさそうなら、定番のテストスタイルにしたい。
ちなみに Test::Harness 用の Test::WWW::Mechanize にあわせて、Test::WWW::Mechanize::CGI というものもある。 これらを用いるとさらにテストを書くのが楽になるが、依存するモジュールも多いので無理に使わないほうがいいかもしれない。
- Test::WWW::Mechanize で Web アプリケーションをテ... (2006-09-13)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
スポンサード リンク
■よく検索されるキーワード
torrent(58) 提案書(54) perl(42) 使い方(39) linux(34) 書き方(29) x31(28) windows(28) usb(24) 動画(22) thinkpad(21) debian(20) mp980(19) 画像(19) 壁紙(19) svn(16) サンプル(16) 作り方(16) c#(15) リフィル(14) ヨドバシ(14) 手帳(13) アジェンダとは(13) 設定(13) cvs(12) ほぼ日手帳(12) ssh(11) 感想(11) ほぼ日(11) アジェンダ(11) java(11) バッグインバッグ(10) ドラマ(10) make(10) マキノ(10) メモリ(10) tc-1(10) 加湿器(10) nikon(10) af(9) ボールペン(9) ノート(9) インストール(9) gmail(9) ハクキンカイロ(9) a6(9) gimp(9) truecrypt(9) フィルムスキャン(9) ganttproject(9) 評判(9) 充電式カイロ(9) カメラ(9) アジェンダの書き方(9) dropbox(9) 修理(9) デロンギ(8) ファイル(8) 秋葉原(8) grub(8) 変換(8) proxy(8) subversion(8) 無料(8) 口コミ(8) wiki(8) ht-01a(8) ubuntu(8) 2008(8) porter(8) 無印(7) a6ノート(7) ご査収(7) ヨドバシカメラ(7) thinkingrock(7) centos(7) the(7) gtd(7) システム手帳(7) 映画(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.122582s / load averages: 0.06, 0.15, 0.19
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク