当前位置:  开发笔记 > 编程语言 > 正文

如何通过CGI.pm获取整个请求体?

如何解决《如何通过CGI.pm获取整个请求体?》经验,为你挑选了2个好方法。

我正在尝试编写一个Perl CGI脚本来处理XML-RPC请求,其中XML文档作为HTTP POST请求的主体发送.

CGI.pm模块在从HTTP请求中提取命名参数方面做得很好,但我无法弄清楚如何让它给我整个HTTP请求体(即XML-RPC请求中的XML文档我是处理).

如果不是CGI.pm,是否有另一个模块能够从请求中解析出这些信息?我宁愿不必从环境变量中"手动"提取这些信息.谢谢你的帮助.



1> friedo..:

您可以使用特殊参数名称POSTDATA获取原始POST数据.

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

或者,你可以直接读取STDIN而不是使用CGI.pm,但是你会失去CGI.pm所做的所有其他有用的东西.

POSTDATA技巧记录在这里优秀的CGI.pm文档中.



2> 小智..:

是的,可以使用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}.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有