Perl学习文档——Perl高级功能(CGI编程)《Perl编程24学时教程》

Cgi编程

<!--[if !supportLists]-->1. Perl用于cgi(基础配置):<!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->Web应用程序的B/SBrowser/Server)结构

静态html网页;

服务器端脚本(asp, php, jsp, ruby等);

Cgi程序:Web服务器用来在服务器上运行程序以生成Web内容的公认的方法(common gateway interface),与服务器端脚本很相似。当客户机浏览器访问cgi程序的url时,服务器运行该cgi程序,生成html内容返回给客户的浏览器并显示。

可以使用多种语言编写cgi程序:perl, C, Unix Shell等等,选择perl是因为其强大的文本处理功能;

Cgi程序生成的Web内容可以为文本、图形、压缩文件、视频等

<!--[if !supportLists]-->l <!--[endif]-->Cgi运行环境的搭建:

需要安装Web Server,能够解析运行php程序的Apache HTTP Server可以配置成可运行perl编写的cgi程序,详细配置过程查看相关教程;(这样只需一个Apache Server即可)

<!--[if !supportLists]-->l <!--[endif]-->编写Perlcgi程序

例子(可以保存为hello.plhello.cgi或其他后缀名<需要在Apachehttpd.conf设置cgi-script脚本的后缀>)

#!C:\perl\bin\perl –w

此路径必须添加,表示perl解释程序安装的路径

use CGI qw(:standard);

使用perlcgi模块

use strict;

print header;

cgiheader函数,输出一个标准标题,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内容

<!--[if !supportLists]-->l 运行perlcgi程序:<!--[endif]-->

可以在命令行下输入perl hello.pl显示结果为

Content-Type: text/html

以及print后的所有内容;

如果在浏览器的browser中输入该程序的url后,如http://localhost/hello.cgi

则会显示网页内容。

<!--[if !supportLists]-->2. 借助Perl强大的字符文本处理、“胶水语言” 功能、以及丰富的模块,将其用作服务器端的脚本语言,可以用来编写功能更加强大的Web应用程序(相对于php等,如可以实现html crawlerhtml/xml parser等)。<!--[endif]-->

<!--[if !supportLists]-->1) <!--[endif]-->表单提交form(php的类似)

含有表单的html文件,其中方法为getpost, action为处理表单提交数据的cgi程序的url

单击submitbutton,各个域的内容提交给cgi程序处理,cgi程序通过param函数接受参数的值(不带参数返回域的名字列表;以某个域的名字为参数返回该域传来的值);

注意:http的消息传输均为明文,安全其期间,可加密后传输(如md5加密);

<!--[if !supportLists]-->2) <!--[endif]-->创建多页窗体的方法,类似与wizard

采用html的隐藏域;<input type=”hidden” …>

告知下一页“是从当前页过去的”

<!--[if !supportLists]--><!--[endif]-->3) HTTP通信介绍:

BrowserWeb Server(ApacheIIS)的通信遵循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 [en]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

两次回车,即可看到GoogleWeb ServerHTTP响应,及HTML源码

<!--[if !supportLists]--><!--[endif]-->4) perlcgi程序返回非文本信息:

perlcgi程序中print header; 默认的Content-Typetext/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.cgiperl程序中,需要print header (-type =>image/jpeg)

<!--[if !supportLists]-->5) 调用perlcgi程序的3种方法:<!--[endif]-->

<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)

<!--[if !supportLists]-->6) 服务器端包含程序SSI,需要Web Server设置,并浏览器支持<!--[endif]-->

通常为.shtml结尾,可以设置;

含有html注释的html文件;

注释部分即为SSI程序代码;

当浏览器URL访问该页时,Web Server分析注释的脚本并生成html,全部返回给浏览器;

Perl可以用来写SSI代码,潜入到html页面中

SSI挺像PHP等服务器端脚本的,只是它shtml结尾)

使用详情请看相关教程

<!--[if !supportLists]-->7) 更好地使用Perlcgi程序,可以查看cgi模块的帮助文档,含有许多函数的用法,完成不同的高级的功能;

<!--[endif]-->

Perldoc cgi或者查看cgihtml帮助文档

Perlcgi程序来完成重定向,它是天衣无缝的!

Print redirect (-url =>$target);

(不像JavaScriptwindow.location.hrefHTML中的<meta http-equiv=’refresh’>产生的重定向,有明显的延迟)

<!--[if !supportLists]-->8) <!--[endif]-->前面有,使得多个页面之间建立关系<图书馆借书的例子,很形象,下一步的操作时能够知道上一步进行到什么程度>(即知道该页面是由前一个页面过来的)可以使用两种方法:1为前面介绍的htmlinput隐藏域;另一种可以使用cookie<理解cookie,就像电影票,火车票一样>

浏览器访问Web服务器,服务器程序可以创建cookie,并发送保存到浏览器,客户端的用户机器里;用户下次访问是,服务器可以检索cookie,知道客户的信息等。

关于cookie

创建、使用、检索(查看)、中止时间、返回服务器设置等

存在的问题局限性

参看21

<!--[if !supportLists]-->9) <!--[endif]-->使用cgi发送电子邮件,看22章;

<!--[if !supportLists]-->10) <!--[endif]-->特殊的技术:

<23>

服务器推送技术,即页面定时显示不同内容;

客户机拖拉技术;

关于浏览器计数;

<24>

网络爬虫(LWP:Simple模块获得网页的内容;接着分析网页的结构;使用Perl提取出想要的东西)可以使用HTML以及XML的处理模块,方便分析。

关于Perl CGI学习,很好的实例网站: http://slashdot.org

(用到了perl, 以及服务器端包含程序SSI)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值