【发布时间】:2009-06-15 15:14:39
【问题描述】:
如何在 Perl CGI 程序中读取 URL 参数?
【问题讨论】:
-
Stackoverflow 是许多人的首选,Google 的“我觉得很幸运”在此处用于多次搜索。所以上面的这些 cmets 是无用的噪音,并请求 stackexchange 为 cmets 添加 downvoting。
如何在 Perl CGI 程序中读取 URL 参数?
【问题讨论】:
对于GET 请求,CGI 解析指定的参数并通过param() 方法使它们可用。
对于 POST 请求,param() 将返回来自 postdata 的参数,但通过 URL 本身中的查询字符串指定的任何参数仍可从 url_param() 方法获得。 (当 POST 请求大于 $CGI::POST_MAX 时,这会很有帮助;在这种情况下,CGI 只会丢弃 postdata,但您可以安排查询字符串参数来识别它是什么类型的请求,以提供良好的错误消息.)
对于ISINDEX 样式请求,所请求的关键字可通过keywords() 方法获得,也可通过param() 在虚假的“关键字”参数中获得。
更新:如果您的意思不是“URL 参数”的参数,url() 方法会提供全部或部分请求的 URL;见OBTAINING THE SCRIPT'S URL。
【讨论】:
建议您使用 ysth 提到的 URL 解析器,但如果您真的想要原始输入,可以通过以下方式获得:
对于 GET:
$contents = $ENV{'QUERY_STRING'};
对于 POST:
$contents = <STDIN>;
【讨论】:
试试这样的代码:
my @names = $query->param;
foreach $name ( @names ) {
if ( $name =~ /\_/ ) {
next;
} else {
print "<p> ".$name."\t=\t".$query->param($name) . "</p>\n";
}
}
【讨论】: