Perl CGI中的GET与POST方法代码实现示例

2021年3月15日09:31:00 发表评论 1,347 次浏览

Perl中,通用网关接口(CGI)无非就是一个协议, 该协议定义了Web服务器与一些可执行程序的交互以生成动态Web页面。基本上, 它显示了Web服务器如何将信息发送到程序, 程序将信息发送回Web服务器, 然后又可以将其发送回浏览器。

GET

POST

不可互换, 并且两种类型都不同。代理服务器可能会缓存

GET请求方法是所有网络请求将信息从浏览器传递到网络服务器的默认方法, 并且还会创建一个长字符串, 该字符串显示在浏览器的网址框中。它发送附加到页面请求的加密用户信息。页面和加密信息之间用

?

字符:

例子:

http://servername.com/cgi-bin/script_name.cgi或.pl?key1 = value1&key2 = value2……。

该信息通过请求参数标头并使用请求参数环境变量, 可以在你的CGI程序中轻松访问。请求字符串中只能有1024个字符, 因为得到方法有大小限制。信息可以通过简单地串联来传递核心价值配对以及任何网址。

注意:如果要处理密码或任何其他敏感信息以将其传递给服务器, 则使用GET方法不是一个好的选择。

例子:

< html >
< head ></ head >
< body >
< b > Search Your Query:</ b >< br >
< FORM action = "Gfg_get.pl" method = "GET" >
< input type = "text" name = "q" size = "20" maxlength = "120" >
< input type = "submit" value = "Search" >< br >
< input type = "radio" name = "l" value = "Web" checked>Web
< input type = "radio" name = "l" value = "India" >IND
</ FORM >
</ body >
</ html >

输出如下:

Perl | CGI中的GET与POST1

以上GET方法形式的Perl-CGI脚本:

#!"c:\xampp\perl\bin\perl.exe"
    
$buffer = $ENV{'QUERY_STRING'};
#split information into key/value pairs
@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;
     $value =~ s/~!/ ~!/g;
     $FORM{$name} = $value;
}
  
$SearchTerm = $FORM{'q'};
$Location = $FORM{'l'};
  
print "Content-type:text/html\r\n\r\n";
print "< html >";
print "< head >";
print "< title >lsbin - Get Method</ title >";
print "</ head >";
print "< body >";
print "< h3 >Hello You searched '$Location' for '$SearchTerm'< br >
Few Matches Found!< br >
< br >
Match 1< br >
Match 2< br >
Match 3< br >
Match 4< br >
etc.....</ h3 >";
print "</ body >";
print "</ html >";
  
1;

输出如下:

Perl | CGI中的GET与POST2

如上所示, 在输出图像中, 信息与URL一起传递:

http://localhost/xampp/cgi-bin/Gfg_get.pl?q=music&l=Web

相反,

POST方法是将信息传递到CGI程序的最可靠方法。通常,

POST需要在服务器上上载信息时使用的方法。旨在上传大量数据,

POST方法被认为更适合它而不是

GET方法, 因为没有数据显示在" URL"框中。类似于

GET方法, 信息也打包在其中, 而不是在之后以文本字符串形式发送

?

在URL框中, 它将通过单独的路由将其作为单独的消息发送到服务器, 你的Perl / CGI程序可以访问该路由。

例子:

< head ></ head >
< body >
< b >Please Fill in the Information:</ b >< br >
< form action = "GfG_post.pl" method = "post" >
First Name:< br >
< input type = "text" name = "first_name" size = "25" maxlength = "100" >< br >
  
Last Name:< br >
< input type = "text" name = "last_name" size = "25" maxlength = "100" >< br >
< br >
Languages:< br >
< input type = "checkbox" name = "python" value = "yes" >Python
< input type = "checkbox" name = "java" value = "yes" >Java
< input type = "checkbox" name = "kotlin" value = "yes" >Kotlin
< input type = "checkbox" name = "perl" value = "yes" >Perl
< input type = "checkbox" name = "swift" value = "yes" >Swift
< br >
Payment: < select name = payment >
< option >---Select---</ option >
< Option value = "Paypal" > Paypal </ option >
< Option value = "Internet Banking" > Internet Banking </ option >
< Option value = "Credit Card" > Credict Card </ option >
< Option value = "Paytm" > Paytm </ option >
</ select >< br >
< br >
First Time Customer?< br >
< input type = "radio" name = "first_time" value = "Yes" >Yes
< input type = "radio" name = "first_time" value = "No" >No< br >
< br >
Feedback:< br >
< textarea wrap = "virtual" name = "feedback" cols = "25" rows = "3" ></ textarea >< br >
< br >
< input type = "submit" value = "Place Order" >
</ form >
</ body >
</ html >

输出如下:

Perl | CGI中的GET与POST3

上述POST方法的Perl-CGI脚本:

#!"c:\xampp\perl\bin\perl.exe"
   
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@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;
     $value =~ s/~!/ ~!/g;
     $FORM{$name} = $value;
}
   
if($FORM{python}) 
{
    $python_flag ="YES";
} 
else 
{
    $python_flag ="NO";
}
   
if($FORM{java}) 
{
    $java_flag ="YES";
}
else 
{
    $java_flag ="NO";
}
   
if($FORM{kotlin})
{
    $kotlin_flag ="YES";
} 
else
{
    $kotlin_flag ="NO";
}
   
if($FORM{perl}) 
{
    $perl_flag ="YES";
} 
else 
{
    $perl_flag ="NO";
}
   
if($FORM{swift}) 
{
    $swift_flag ="YES";
} 
else
{
    $swift_flag ="NO";
}
   
$first_name= $FORM{'first_name'};
$last_name= $FORM{'last_name'};
$payment_method= $FORM{'payment'};
$first_time= $FORM{'first_time'};
$feed_back= $FORM{'feedback'};
   
print "Content-type:text/html\r\n\r\n";
print "< html >";
print "< head >";
print "< title >lsbin - Post Method</ title >";
print "</ head >";
print "< body >";
print "< h3 >Hello $first_name $last_name</ h3 >";
print "< h3 >Here is your Purchased Order!</ h3 >";
print "< h3 >Python: $python_flag</ h3 >";
print "< h3 >Java: $java_flag</ h3 >";
print "< h3 >Kotlin: $kotlin_flag</ h3 >";
print "< h3 >Perl: $perl_flag</ h3 >";
print "< h3 >Swift: $swift_flag</ h3 >";
print "< h3 >Payment Method: $payment_method</ h3 >";
print "< h3 >First Time Customer: $first_time</ h3 >";
print "< h3 >Feedback: $feed_back</ h3 >";
print "</ body >";
print "</ html >";
   
1;

输出如下:

Perl | CGI中的GET与POST4

如上图所示, 使用后开机自检方法, 将信息上载到服务器而不显示在URL框中。与通过互联网发送的数据相比, 这使得通过Internet发送的数据更加安全。得到方法。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: