【问题标题】:Are there any problems handling a POST request as a GET request on the server在服务器上将 POST 请求作为 GET 请求处理是否有任何问题
【发布时间】: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


【解决方案1】:

POST 和 GET 意味着完全不同的东西,你不应该这样“测试”任何东西。

相反,您应该使用 Perl 的 LWP 对预期的 URL 进行真正的 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;

【讨论】:

  • 请看我原来的问题,上面有一个链接。不过,我不这样做有两个原因。一,我使用 mod_rewrite 将所有请求重定向到最终执行预期 CGI 脚本的文件。第二,我可以在您建议的请求中添加一个特殊参数或其他内容,以确保绕过 mod_rewrite,但这最终会导致请求时间超出我的承受能力。
  • 您的评论不合逻辑。 mod_rewrite 与任何与 HTTP 方法有关的东西都没有关系。
  • 不,但这与我最初的问题以及我首先以这种方式处理请求的原因有关。
  • 感谢乔纳森的意见。对于大多数人来说,这可能是处理这种情况的正确方法。
【解决方案2】:

由于 GET 的大小限制比 POST 小得多,因此您会遇到较大的提交和文件上传问题。如果您谈论的是可预测的少量数据,那应该没问题。

【讨论】:

  • 嗯,最初的问题集中在相当大的请求上。但是,我认为 GET 大小的限制主要是大多数浏览器中 URL 限制的产物。我认为 Perl 的 CGI 模块和 Linux 环境变量都没有提供任何严重的大小限制,因为它运行在 64 位机器上。就文件上传而言,CGI 模块已经有机会处理文件,临时位置应该是参数中剩下的所有内容。如果我错了,请纠正我。我现在正在对此进行测试。
  • 迄今为止选择了最佳答案,因为它是唯一定义可能问题的答案,这就是问题的重点。
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2013-10-03
  • 2019-06-26
相关资源
最近更新 更多