2011年2月3日木曜日

[Perl] CGI.pmでapplication/xmlなPOSTデータを取得

数年前は
my $q = CGI->new;
$q->param('POSTDATA')
で取得できたのに、最新版(3.49)では取得できなかったので、メモ。

各バージョンのCGI.pmのソースを見ると、3.27 以降に
# If the content-type is 'application/xml', we just set the param
# XForms:Model (referring to the xml syntax) param containing the
# unparsed XML data.
とコメントがあり、content-type が 'application/xml の場合は、
my $q = CGI->new;
$q->param('XForms:Model')
となる。

CGI.pm
if ($meth eq 'POST' && defined($ENV{'CONTENT_TYPE'})) {
    if ($ENV{'CONTENT_TYPE'} eq 'application/xml') {
        my($param) = 'XForms:Model';
        my($value) = '';
        $self->add_parameter($param);
        $self->read_from_client(\$value,$content_length,0)
        if $content_length > 0;
        push (@{$self->{$param}},$value);
        $is_xforms = 1;
    } elsif ($ENV{'CONTENT_TYPE'} =~ /multipart\/related.+boundary=\"?([^\";,]+)\"?.+start=\"?\]+)\>?\"?/) {
        my($boundary,$start) = ($1,$2);

参考)http://search.cpan.org/~lds/CGI.pm/lib/CGI.pm

0 件のコメント: