【问题标题】:Perl CGI reading both url_param and param reliablyPerl CGI 可靠地读取 url_param 和 param
【发布时间】:2012-05-01 06:01:56
【问题描述】:

我正在编写一个函数,该函数将在所有参数传递给 CGI 脚本后列出,无论是通过使用 POST 发送的表单、URL 字符串还是两者。

有两个功能:

param():尽管有documentation,但我发现只有在没有 POST 参数的情况下才能从表单 OR URL 参数中读取 EITHER POST 参数。

另一方面,url_param() 将永远读取通过 URL 字符串传入的参数,而不考虑 POST。


我的功能

sub post_and_url_param_keys{
  if(url_param){
    return [url_param, param];
  }else{
    return [param];
}

如果传入的话可以列出所有参数:

POST 和 URL 参数

仅 POST 参数

X 仅 URL 参数(每个键列出两次)

有没有办法巧妙地解决这个问题,而不必检查每个参数对的名称和值是否有重复项?

【问题讨论】:

  • 你为什么不使用 CGI.pm?即使你不想使用它,你仍然可以阅读源代码,看看它是如何做同样的事情的。
  • 如果您将部署从 CGI 迁移到 PSGI,parameters in Plack::Request 会为您提供 GET 和 POST。

标签: perl url cgi param


【解决方案1】:

一个稍微改进的方法是检查request_method() eq 'POST'。如果您查询字符串并发布两者都包含相同的参数名称,您仍然可能会得到重复的参数名称。

【讨论】:

    【解决方案2】:

    检查code for the CGI module 后,除了第 670 行的一条语句(如果来自 POST 数据和查询字符串的数据应该取消注释)之外,我看不到任何地方检查 QUERY_STRING 环境变量的 POST 请求合并。

    我建议要么在您的 CGI 副本中取消注释这一行,要么将 POST 数据中的值复制到其他地方的 URL - 也许是浏览器?

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 2012-04-25
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2014-08-26
      相关资源
      最近更新 更多