【问题标题】:How can I read the URL-Data send with POST in Perl?如何在 Perl 中读取使用 POST 发送的 URL 数据?
【发布时间】:2009-12-14 15:02:30
【问题描述】:

我正在尝试读取从页面中的表单发送到我的 Perl 脚本的 POST-Data。我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'};

一切正常。有人有想法吗?

【问题讨论】:

    标签: perl forms post cgi query-string


    【解决方案1】:

    你这个级别的人绝对没有真正的理由要手动解析 CGI 请求。

    请使用CGI::SimpleCGI.pm

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

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

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

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

    【讨论】:

    • @Manni,不是真的。此时,手工编写CGI解析就像编写乘法一样重复加法。这不是任何现代程序员都应该处理的事情,除非他们想专注于低级的东西。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在 mod_perl 2 下,Apache2::Request 为我工作。

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 2014-10-10
        相关资源
        最近更新 更多