« Cyberduck 2.5.1がでたけど、10.3.9でうまく動かず | メイン | サーバがKernel Panicしてた。 »

CGI.pmでtext/xmlなPOSTデータを読みたい場合

CGI.pmでtext/xmlなPOSTデータを読みたい場合、

my $q = CGI->new;
$q->param('POSTDATA')

で読める。いままで知りませんでした。

正確には、x-www-form-urlencoded や multipart/form-dataではない場合に、POSTデータはPOSTDATAで読み出せる。ソースでは、

# YL: Begin Change for XML handler 10/19/2001
    if ($meth eq 'POST'
        && defined($ENV{'CONTENT_TYPE'})
        && $ENV{'CONTENT_TYPE'} !~ m|^application/x-www-form-urlencoded|
	&& $ENV{'CONTENT_TYPE'} !~ m|^multipart/form-data| ) {
        my($param) = 'POSTDATA' ;
        $self->add_parameter($param) ;
      push (@{$self->{$param}},$query_string);
      undef $query_string ;
    }
# YL: End Change for XML handler 10/19/2001

このようになっている。CGI.pmのcgi_docs.htmlにも書いてありました。

これを使うとAjaxやFlashのXMLリクエストの取得がスムーズだし、Web APIがCGI.pmを使っていても書けそうだ。