在服务器上处理POST请求作为GET请求是否有任何问题

时间:2009-12-07 15:31:34

标签: perl cgi http-headers

试图解决我在此问题中发布的问题:

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请求。

这种方法到目前为止似乎有效,但我担心会出现无意的后果。

我的问题是,你认为这有什么潜在的问题吗?

2 个答案:

答案 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。如果你在谈论可预测的少量数据,你应该没问题。