2008-02-09

Perl CGI.pm で PUT を POST に見立てる方法?

Perl CGI.pm を使って application/atom+xml;type=entry なデータを POST と PUT で取得しようと思ったら、なんと PUT だと POSTDATA が取得できないじゃないですか。

次のブログを読んでみると、CGI.pm は HEAD、GET、POST にしか対応していないようですね。しかも、外部からコードの振る舞いを変えるような仕組みにはなっていないようです。ちょっと困りました。

CGI.pmでtext/xmlなPOSTデータを読みたい場合 : blog.nomadscafe.jp
CGI.pm の POSTDATA - naoyaのはてなダイアリー

しかたがないので、次のように PUT のときは POST として、CGI.pm を騙す方法で使ってみています。
my $m = $ENV{'REQUEST_METHOD'};
if ($m eq 'PUT') {
$ENV{'REQUEST_METHOD'} = 'POST';
}
my $cgi = CGI->new;
$ENV{'REQUEST_METHOD'} = $m;
なんかイマイチですけれど、CGI.pm のソースコードを見る限り、期待どおり動作してくれるように見えます。また、実際に試行していますが、今のところ不都合はないようです。

CGI.pm のバージョンは、次のとおりでした。ちょっと古めのものかもしれません。
$CGI::revision = '$Id: CGI.pm,v 1.208 2006/04/23 14:25:14 lstein Exp $';
$CGI::VERSION='3.20';
この対策は、バージョンや環境に依存するかもしれませんし、見つけていない不都合があるかもしれません。使おうとするときは、十分な検証をお願いしますね。

RESTful WebサービスRESTful Webサービス
Leonard Richardson Sam Ruby 山本 陽平

WEB+DB PRESS Vol.42 アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣 RailsによるアジャイルWebアプリケーション開発 第2版 Statistics Hacks ―統計の基本と世界を測るテクニック WEB+DB PRESS Vol.41

by G-Tools

0 件のコメント: