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

时间:2018-12-11 10:20:10

标签: perl post cgi query-string

您可以使用以下代码在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则不起作用,我正在使用提取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 个答案:

答案 0 :(得分:2)

使用URL中的所有数据发出POST请求似乎很奇怪。为什么不做一个GET

但是,无论如何,CGI.pm已经覆盖了您。文档中有一个名为 Mixing post and url parameters 的部分,内容如下:

my $color = url_param('color');
     

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