试图解决我在此问题中发布的问题:
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请求。
这种方法到目前为止似乎有效,但我担心会出现无意的后果。
我的问题是,你认为这有什么潜在的问题吗?
答案 0 :(得分:2)
POST和获取意味着完全不同的东西,你不应该以任何方式“测试”。
相反,您应该使用Perl的LWP对目标网址进行真正的POST。
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = POST 'http://www.perl.com/cgi-bin/BugGlimpse',
[ param1 => 'arbitrarily long blob', param2 => 'whatever' ];
print $ua->request($req)->as_string;
答案 1 :(得分:1)
你会遇到更大的提交和文件上传的问题,因为GET的大小限制远小于POST。如果你在谈论可预测的少量数据,你应该没问题。