【发布时间】:2009-12-07 23:44:38
【问题描述】:
为了解决我在这个问题中发布的问题:
Is it possible to send POST parameters to a CGI script using a system() call?
到目前为止,唯一成功解决该问题的方法是诱使环境认为请求是 GET。为此,我将 POST 参数转换为查询字符串,将该字符串保存在默认环境变量中,然后将告诉服务器此请求使用什么方法的环境变量更改为 GET。
$ENV{'QUERY_STRING'} = $long_parameter_string . '&' . $ENV{'QUERY_STRING'};
$ENV{'REQUEST_METHOD'} = 'GET';
system {$perl_exec} $cgi_script;
我实际上是在欺骗 CGI 模块从 QUERY_STRING 环境变量而不是从 STDIN 读取,它会尝试从中读取 POST 请求。
到目前为止,这种方法似乎有效,但我担心会产生意想不到的影响。
我的问题是,您认为这有什么潜在的问题吗?
【问题讨论】:
-
需要明确的是,我并不是要就这是否是“正确”的事情进行哲学论证。我想知道可能出现并需要测试的潜在问题。这只是我遇到的一个奇怪的现实问题的实用解决方案。
-
我将其更改为社区 wiki,因为我认为不一定有正确的答案。
-
您似乎忽略了打开进程管道并写入它的建议。如果您想测试 POST,请停止尝试强制 system() 进入其中。 Perl 工具箱中还有许多其他工具。
-
我没有忽略它,它实际上在我原始问题的示例代码中,我将有关此问题的 cmets 留给了回答的两个人。管道传递参数,但仍然截断它们。此外,由于这个问题与我最初的问题有关,因此在该问题的线程中可能会更好地解决。
-
设置环境,打开管道,写入。不要将数据放在命令行上。查看 CGI 协议以了解您需要做什么。
标签: perl cgi http-headers