perl - 如何从 CGI Perl 脚本中的 POST 请求中获取查询字符串参数?
问题描述
您可以使用以下代码在 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 模块的查询字符串的原始方法?
解决方案
POST
使用 URL 中的所有数据发出请求似乎很奇怪。为什么不做一个GET
?
但是,无论如何,CGI.pm 已经涵盖了您。文档中有一个名为Mixing post and url parameters的部分,内容如下:
my $color = url_param('color');
通过创建一个 POST 到包含查询字符串(“?”标记后跟参数)的 URL 的表单,脚本可以在 URL 和填写表单中接收 CGI 参数。param() 方法将始终返回 POST 填写表单的内容,忽略 URL 的查询字符串。要检索 URL 参数,请调用 url_param() 方法。使用方法与 param() 相同。主要区别在于它允许您读取参数,但不能设置它们。
推荐阅读
- python - 我们如何在数组索引中使用“和”运算符?
- angular - 在 .net core Web api 中获取用户分析的最佳方法
- asp.net - 在 Devexpress 中的页面加载时执行的 Javascript 函数
- angular6 - 2 个文本字段映射到相同的 formcontrolname angular 2+
- elixir - 在ecto 3.0中选择合并
- c++ - 提升 ASIO 慢
- prolog - 通过给定条件定义奶奶序言
- ios - 从安装或更新中排除特定的 pod
- python-3.x - 如何在没有额外注释的情况下从 Jupyter Notebook 下载
- javascript - Ajv:使用动态键验证 json