Perl CGI编程
在Perl中,CGI(Common Gateway Interface)是一个通过网络请求执行脚本的协议。它是一套规则和标准,定义了网络服务器和自定义脚本之间的信息交换方式。早些时候,像Perl这样的脚本语言被用来编写CGI应用程序。而且,由HTTP服务器调用的CGI代码被称为CGI脚本。后来,网络的发展引起了对动态内容需求的增加,通过这种方式,用其他语言而不是Perl编写的CGI应用程序变得更加流行和需要,并被称为脚本。脚本如何被服务器执行的具体细节由服务器决定。CGI应用程序几乎可以执行任何任务。例如,你可以访问数据库,保持telnet会话,即时创建网页和生成图形等。CGI是有一个非常简单的概念,但创建一个CGI应用程序需要真正的编程技巧。
什么是CGI?
通用网关接口(CGI)只不过是一个协议,它定义了网络服务器与一些可执行程序的互动,以产生动态网页。基本上,它显示了网络服务器如何将信息发送给程序,而程序将信息发回给网络服务器,反过来又可以发回给浏览器。在网络服务器和外部程序之间,它被认为是标准的编程接口。
CGI代表。
通用: 与许多不同的操作系统互动。
网关: 它为用户提供途径,以获得对不同程序的访问,如图片生成器或数据库等。
接口: 它使用一种方法与网络服务器互动。
CGI程序可以发送许多类型的数据或媒体,如文件、图像、音频剪辑等。大多数网站使用CGI的字段进行输入,网络上动态内容的交易主要是通过CGI完成的。它是一种方法,通过这种方法,网络服务器可以分别从数据库、文档和其他程序获得/发送数据,然后通过网络将这些数据呈现给浏览者。
CGI架构
在上图中,在HTTP(超文本传输协议)的帮助下,运行在客户机上的网络浏览器与网络服务器交换信息。由于CGI程序和网络服务器通常运行在网络服务器所在的同一系统上,根据浏览器的请求,网络服务器要么从自己的文档目录中提供文档,要么执行CGI程序。
简单的CGI程序:
下面是一个简单的程序,用来理解Perl中CGI编程的工作。在这里,我们将在HTML程序中获得输入,然后运行CGI脚本以得到网页。
因为,HTML确定了一些输入字段,我们可以用它们来将用户数据传递给CGI程序。这里,是利用这些输入字段的HTML表格,如文本字段、下拉列表、复选框和一个提交按钮,用于提交用户数据到网络服务器。
<html>
<head>
<title>GfG Test Example Form</title>
</head>
<body>
<h1>CGI-Example Form</h1>
<h3><p>Information Required.</p></h3>
<form action="/cgi-bin/script.pl" method="Post">
<table>
<tr>
<td>Name:</td>
<td><input type="text" name="name"><td>
</tr>
<tr>
<td>Gender:</td>
<td><select name="gender" size="1">
<option>Female</option>
<option>Male</option>
<option>Transgender</option>
</select></td>
</tr>
<tr>
<td>Profession:</td>
<td><input type="text" name="profession"><td>
</tr>
<tr>
<td>Sports:</td>
<td><input type="checkbox" name="sport"
value="Cricket">Cricket
<input type="checkbox" name="sport"
value="Hockey">Hockey
<input type="checkbox" name="sport"
value="TableTennis">TableTennis
<input type="checkbox" name="sport"
value="Football">Football</td>
</tr>
<tr>
<td colspan="2"><input type="submit"></td>
</tr>
</table>
</form>
</body>
</html>
注意: HTML表单中的每个输入元素都有一个名称属性,这在我们需要访问数据时是很重要的。而且,所有的输入元素都在<form>
标签内。此外,<form>
标签也有一个 “action “属性,它决定了提交表单时将调用的CGI脚本。
上述表格的Perl-CGI脚本。
推荐使用:请先在{IDE}
上尝试你的方法,然后再继续解决
#!"c:\xampp\perl\bin\perl.exe"
use strict;
use CGI ':standard';
my name = param('name');
mygender = param('gender');
my profession = param('profession');
my @sports = param('sport');
mylist;
if (@sports)
{
list = join ', ', @sports;
}
else
{
list = 'Null';
}
print header,
start_html(-title=>name),
h1("Hello,name"),
h3 p('You have Submitted the following Data:'),
h4 table(Tr(td('Name:'),
h4 td(name)),
h4 Tr(td('Gender:'),
h4 td(gender)),
h4 Tr(td('Profession:'),
h4 td(profession)),
h4 Tr(td('Sports:'),
h4 td(list))),
end_html;
CGI.pm: CGI.pm(使用CGI;)是一个大型的、广泛使用的Perl模块,用于编程CGI网络应用程序,它为接收和处理用户输入提供了一致的API。我们需要写一个Perl脚本来返回HTTP响应头(Content-type: html/text)和正文中的HTML,但CGI.pm为我们轻松地处理了这个问题(不需要对HTTP响应头进行硬编码)。
它有一个名为 “param “的函数,可以将我们传递给脚本的数据的细节/信息发送回来。当它被赋予一个参数的名称时,它返回与该名称相关的值。在HTML表格页面中的输入元素的名称就是CGI参数的名称。
注意: 提交表单后,我们将得到的网页如下所示。如果你注意到在网页浏览器的URL框中,你会发现现在的URL已经被改变了。