CGI的sub param处理输入数据与常规QUERY_STRING或read处理输入数据的对比
#!/usr/bin/perl -w
use CGI;
$cgi = new CGI;
print $cgi->header();
print $cgi->start_html('this is a title');
@name=$cgi->param;
foreach $name (@name) {
$value =$cgi->param($name);
$value=~tr/+//;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
print "<li><code>$name=$value</code>";
}
print $cgi->end_html;
——————————————————————————————————————-
if($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
} elsif ($ENV{'REQUEST_METHOD'} eq "GET")
{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs=split(/&/,$buffer);
foreach $pair (@pairs)
{
($name,$value)=split(/=/,$pair);
$value=~tr/+//;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
print "<li><code>$name=$value</code>";
}
实例:
##直接用来purge页面缓存
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $req=new CGI;
print $req->header;
print <<HTML;
<form method="post" action="post.cgi" name="form">
<textarea name=url rows=5 cols=60>
</textarea>
<P>
<input type=submit><input type=reset>
</form>
HTML
my $url=$req->param("url");
$url=~tr/+//;
$url=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
my @url=split/\n/,$url;
foreach (@url){
my $purge_url=$_;
if(/http:\/\/(\S+?)(?=\/)/){
if ($1){
my $squid_req=system("squidclient -h$1 -p80 -mPURGE $purge_url");
print $squid_req;
}
}
}