📜  珀尔 | CGI 中的 GET 与 POST

📅  最后修改于: 2022-05-13 01:54:33.874000             🧑  作者: Mango

珀尔 | CGI 中的 GET 与 POST

在 Perl 中,通用网关接口 (CGI) 只不过是一种协议,它定义了 Web 服务器与一些可执行程序的交互,以生成动态网页。基本上,它显示了 Web 服务器如何向程序发送信息,程序如何将信息发送回 Web 服务器,而 Web 服务器又可以发送回浏览器。
GETPOST不可互换,并且两种类型都不同。代理服务器可以缓存GET请求的输出。 GET方法是所有 Web 请求将信息从浏览器传递到 Web 服务器的默认方法,它还会创建一个长字符串,显示在浏览器的 URL 框中。它发送附加到页面请求的加密用户信息。页面和加密信息之间用?分隔。字符:
例子:

此信息通过QUERY_STRING标头传递,并且通过使用QUERY_STRING环境变量,它可以在您的 CGI 程序中轻松访问。由于GET方法有大小限制,因此请求字符串中只能有 1024 个字符。可以通过简单地将键值对与任何 URL 连接起来来传递信息。

例子:




 Search Your Query:

Web IND

输出:

上述 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 "";
print "";
print "GeeksForGeeks - Get Method";
print "";
print "";
print "

Hello You searched '$Location' for '$SearchTerm'
Few Matches Found!

Match 1
Match 2
Match 3
Match 4
etc.....

"; print ""; print "";    1;

输出:

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

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


相比之下, POST方法是将信息传递给 CGI 程序的最可靠方法。一般在需要将信息上传到服务器时使用POST方式。针对上传数据量较大的情况,认为POST方法比GET方法更适合它,因为 URL 框中没有数据出现。与GET方法类似,信息也包含在其中,但不是在?之后将其作为文本字符串发送。在 URL 框中,它通过您的 Perl/CGI 程序可以访问的不同路由将其作为单独的消息发送到服务器。

例子:



Please Fill in the Information:
First Name:

   Last Name:


Languages:
Python Java Kotlin Perl Swift
Payment:

First Time Customer?
Yes No

Feedback:


输出:

上述 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 "";
print "";
print "GeeksForGeeks - Post Method";
print "";
print "";
print "

Hello $first_name $last_name

"; print "

Here is your Purchased Order!

"; print "

Python: $python_flag

"; print "

Java: $java_flag

"; print "

Kotlin: $kotlin_flag

"; print "

Perl: $perl_flag

"; print "

Swift: $swift_flag

"; print "

Payment Method: $payment_method

"; print "

First Time Customer: $first_time

"; print "

Feedback: $feed_back

"; print ""; print "";     1;

输出:

从上图中可以看出,使用POST方法后,信息会上传到服务器,而不会出现在 URL 框中。与GET方法相比,这使得通过 Internet 发送的数据更加安全。