Perl学习文档——Perl高级功能(CGI编程)《Perl编程24学时教程》
Cgi编程<!---->1. Perl用于cgi(基础配置):<!---->
<!---->l <!---->Web应用程序的B/S(Browser/Server)结构:
静态html网页;
服务器端脚本(asp, php, jsp, ruby等);
Cgi程序:Web服务器用来在服务器上运行程序以生成Web内容的公认的方法(common gateway interface),与服务器端脚本很相似。当客户机浏览器访问cgi程序的url时,服务器运行该cgi程序,生成html内容返回给客户的浏览器并显示。
可以使用多种语言编写cgi程序:perl, C, Unix Shell等等,选择perl是因为其强大的文本处理功能;
Cgi程序生成的Web内容可以为文本、图形、压缩文件、视频等
<!---->l <!---->Cgi运行环境的搭建:
需要安装Web Server,能够解析运行php程序的Apache HTTP Server可以配置成可运行perl编写的cgi程序,详细配置过程查看相关教程;(这样只需一个Apache Server即可)
<!---->l <!---->编写Perl的cgi程序:
例子(可以保存为hello.pl或hello.cgi或其他后缀名<需要在Apache的httpd.conf设置cgi-script脚本的后缀>):
#!C:\perl\bin\perl –w
此路径必须添加,表示perl解释程序安装的路径
use CGI qw(:standard);
使用perl的cgi模块
use strict;
print header;
cgi的header函数,输出一个标准标题,server以及browser看到它才能处理cgi程序
#! must use 'my' to define a variable
my $now_string = localtime();
print "<b>Hello, CGI using Perl!</b><br/>It's $now_string NOW!<br />";
输出html内容
<!---->l 运行perl的cgi程序:<!---->
可以在命令行下输入perl hello.pl显示结果为
Content-Type: text/html
以及print后的所有内容;
如果在浏览器的browser中输入该程序的url后,如http://localhost/hello.cgi
则会显示网页内容。
<!---->2. 借助Perl强大的字符文本处理、“胶水语言” 功能、以及丰富的模块,将其用作服务器端的脚本语言,可以用来编写功能更加强大的Web应用程序(相对于php等,如可以实现html crawler和html/xml parser等)。<!---->
<!---->1) <!---->表单提交form(和php的类似):
含有表单的html文件,其中方法为get或post, action为处理表单提交数据的cgi程序的url;
单击submit的button,各个域的内容提交给cgi程序处理,cgi程序通过param函数接受参数的值(不带参数返回域的名字列表;以某个域的名字为参数返回该域传来的值);
注意:http的消息传输均为明文,安全其期间,可加密后传输(如md5加密);
<!---->2) <!---->创建多页窗体的方法,类似与wizard:
采用html的隐藏域;<input type=”hidden” …>
告知下一页“是从当前页过去的”
<!----><!---->3) HTTP通信介绍:
Browser与Web Server(Apache或IIS等)的通信遵循HTTP协议,该协议目前两个版本HTTP 1.0/HTTP 1.1;
Browser的地址栏中输入URL并连接Web Server后,便向Web Server发送HTTP请求,初始消息类似下面的形式:
GET http://www.google.com/ HTTP/1.0
Connection: Keep-Alive
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Charset: iso-8859-1, *, utf-8
Accept-Encoding: gzip
Accept-Language: en, en-GB, de, fr, ja, ko, zh
Host: www.google.com:80
User-Agent: Mozilla/4.51 C-c<chmetcnv w:st="on" unitname="F" sourcevalue="32" hasspace="False" negative="False" numbertype="1" tcsc="0">32f</chmetcnv>404p {WinNT; U}
Web Server的应答信息通常为如下形式:
GET http://www.google.com/ --> 200 OK
Date: Mon, 21 May 2007 10:47:20 GMT
Server: GWS/2.1
Content-Length: 777324
Content-Type: text/html; charset=ISO-8859-1
Last-Modified: Mon, 21 May 2007 10:47:20 GMT
等
人工模仿该过程:
使用telnet,命令行下输入:
telnet www.google.com 80
连接成功後在输入:
GET http://www.google.com/ HTTP/1.0
两次回车,即可看到Google的Web Server的HTTP响应,及HTML源码
<!----><!---->4) perl的cgi程序返回非文本信息:
perl的cgi程序中print header; 默认的Content-Type为text/html
可修改header的参数,是的cgi程序向浏览器输出非文本信息,如:
Print header (-type =>MIME_type)
MIME_type可以为:text/plain, image/gif, image/jpeg, 甚至application/appname(指应用程序appname特定的数据)
例子:
可以动态地输出图片:
<img src=”/cgi-bin/daily-image.cgi”>
这是daily-image.cgi的perl程序中,需要print header (-type =>image/jpeg)
<!---->5) 调用perl的cgi程序的3种方法:<!---->
<a href=’http://server/cgi-bin/perl.cgi’>hyperlink<a>
<img src=’/cgi-bin/daily-image.cgi’>
<form method=’get/post’ action=’http://server/cgi-bin/perl.cgi’>
可以将参数传给cgi程序
http://server/cgi-bin/perl.cgi?name=hemin&sex=male
如果参数含有转义字符,如空格、引号等
可以使用escape函数,如
http://server/cgi-bin/perl.cgi?name=escape($name)
<!---->6) 服务器端包含程序SSI,需要Web Server设置,并浏览器支持<!---->
通常为.shtml结尾,可以设置;
含有html注释的html文件;
注释部分即为SSI程序代码;
当浏览器URL访问该页时,Web Server分析注释的脚本并生成html,全部返回给浏览器;
Perl可以用来写SSI代码,潜入到html页面中
(SSI挺像PHP等服务器端脚本的,只是它shtml结尾)
使用详情请看相关教程
<!---->7) 更好地使用Perl的cgi程序,可以查看cgi模块的帮助文档,含有许多函数的用法,完成不同的高级的功能;<!---->
Perldoc cgi或者查看cgi的html帮助文档
Perl的cgi程序来完成重定向,它是天衣无缝的!
Print redirect (-url =>$target);
(不像JavaScript的window.location.href或HTML中的<meta http-equiv=’refresh’>产生的重定向,有明显的延迟)
<!---->8) <!---->前面有,使得多个页面之间建立关系<图书馆借书的例子,很形象,下一步的操作时能够知道上一步进行到什么程度>(即知道该页面是由前一个页面过来的)可以使用两种方法:1为前面介绍的html的input隐藏域;另一种可以使用cookie<理解cookie,就像电影票,火车票一样>
浏览器访问Web服务器,服务器程序可以创建cookie,并发送保存到浏览器,客户端的用户机器里;用户下次访问是,服务器可以检索cookie,知道客户的信息等。
关于cookie的
创建、使用、检索(查看)、中止时间、返回服务器设置等
存在的问题局限性
参看21章
<!---->9) <!---->使用cgi发送电子邮件,看22章;
<!---->10) <!---->特殊的技术:
<23章>
服务器推送技术,即页面定时显示不同内容;
客户机拖拉技术;
关于浏览器计数;
<24章>
网络爬虫(LWP:Simple模块获得网页的内容;接着分析网页的结构;使用Perl提取出想要的东西)可以使用HTML以及XML的处理模块,方便分析。
关于Perl CGI学习,很好的实例网站: http://slashdot.org
(用到了perl, 以及服务器端包含程序SSI)
页:
[1]