如何在Perl中阅读使用POST发送的URL-Data?

时间:2009-12-14 15:02:30

标签: perl forms post cgi query-string

我正在尝试读出从页面中的表单发送到我的Perl脚本的POST数据。我用Google搜索并发现:

read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'})

读取整个Data-String,并以

的形式将整个字符串写入$ param_string
Param1=Value1&Param2=Value2&Param3=Value3

通过将其拆分到正确的位置,我得到了必要的数据。

但我想知道为什么我的$ param_string为空。

当我用GET尝试整个事情时:

$param_string = $ENV{'QUERY_STRING'};
一切正常。有人有想法吗?

3 个答案:

答案 0 :(得分:12)

你们这个级别的人绝对没有理由想要解析CGI请求。

请使用CGI::SimpleCGI.pm

CGI.pm有很多包袱(HTML生成,面向功能的界面),这使得CGI::Simple更受欢迎。

在CPAN上使用任何CGI处理模块比尝试从头开始编写CGI处理代码要好。

请参阅CGI::Simple中的parse_query_string,了解在处理发布到脚本的表单时访问使用查询字符串传递的参数的方法。

如果您想学习如何正确操作,可以阅读任一模块的源代码。阅读CGI.pm CHANGES file也很有启发性。

答案 1 :(得分:0)

在mod_perl 2下,Apache2::Request适用于我。

答案 2 :(得分:0)

如果您能够检索GET数据但无法检索POST数据,则很可能您忘记将表单方法更改为发布。您可以在if语句中使用以下条件来检查提交方法:

if ($ENV{'REQUEST_METHOD'} eq "POST"){
   read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'});
}else {
   $param_string = $ENV{'QUERY_STRING'};
}