代码之家  ›  专栏  ›  技术社区  ›  jcubic

如何在CGI Perl脚本中从POST请求中获取查询字符串参数?

  •  1
  • jcubic  · 技术社区  · 6 年前

    您可以使用以下代码在CGI脚本中获取查询参数:

    #!C:\Perl64\bin\perl.exe
    
    use CGI;
    
    my $cgi = CGI->new();
    
    my $file = $cgi->param( "file" );
    print "Content-Type: text/plain\n\n";
    
    my $text = do {
        open(my $f, "<:encoding(UTF-8)", $file)
          or die("Can't open \$filename\": $!\n");
        local $/;
        <$f>
    };
    
    print $text;
    

    但如果请求是POST,则这不起作用,我将使用fetch API发送此请求:

    await fetch('cgi-bin/script.pl?file=..\foo.php', {
       method: 'POST',
       body: 'Some Text'
    }).then(r => r.text());
    

    如果我在浏览器中打开脚本,我将获得文件的内容。有没有办法告诉CGI模块从QueryString获取参数而不是POST数据?或者任何其他在Perl中没有CGI模块的原始查询字符串解析方法?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dave Cross    6 年前

    看起来很奇怪 POST 请求URL中的所有数据。为什么不干脆做个决定呢 GET

    但是,不管怎样,CGI.pm已经涵盖了你。文档中有一个部分叫做 Mixing post and url parameters 上面写着:

    my $color = url_param('color');
    

    脚本可以通过创建一个表单来接收URL中以及填写表单中的CGI参数,该表单将发布到包含查询字符串(后跟参数的“?”标记)的URL。param()方法将始终返回已发布的填写表单的内容,忽略URL的查询字符串。要检索URL参数,请调用URL_param()方法。以与param()相同的方式使用它。主要区别在于,它允许您读取参数,但不允许设置参数。