我正在尝试编写一个Perl CGI脚本来处理XML-RPC请求,其中XML文档作为HTTP POST请求的主体发送.
CGI.pm模块在从HTTP请求中提取命名参数方面做得很好,但我无法弄清楚如何让它给我整个HTTP请求体(即XML-RPC请求中的XML文档我是处理).
如果不是CGI.pm,是否有另一个模块能够从请求中解析出这些信息?我宁愿不必从环境变量中"手动"提取这些信息.谢谢你的帮助.
您可以使用特殊参数名称POSTDATA获取原始POST数据.
my $q = CGI->new; my $xml = $q->param( 'POSTDATA' );
或者,你可以直接读取STDIN而不是使用CGI.pm,但是你会失去CGI.pm所做的所有其他有用的东西.
POSTDATA技巧记录在这里优秀的CGI.pm文档中.
是的,可以使用POSTDATA,但这只有在请求Content-Type尚未设置为'multipart/form-data'时才有效.
如果将其设置为'multipart/form-data',则CGI.pm会自行进行内容处理,并且不会初始化POSTDATA.
因此,其他选项包括$cgi->query_string
和/或$cgi->Dump
.
在$cgi->query_string
返回POST的一个GET格式(的内容param=value&...
),并且似乎没有成为一个办法简单地得到这个职位STDIN,因为它们是由客户端传递的内容.
因此,要获得一个POST请求的标准输入的实际内容,如果修改CGI.pm是一个选择,你可以修改周围线620的内容保存@lines
的地方,在一个变量,例如:
$self->{standard_input} = join '', @lines;
然后通过访问它$cgi->{standard_input}
.