perl教程020

perl教程020 - 下载...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 下载 第 20 学时 对 HTTP和 CGI进行操作 在本学时中,你将要学习如何对 We b进行一系列有趣的操作。可以使用 C G I 程序,使 We b 站点变得更加灵活,并且更加便于管理。 在本学时中,你将要学习: • 如何将 HTML程序从服务器传送到你的浏览器。 • 如何使 CGI程序能够发送 HTML文档。 • 如何将值直接传递给 CGI程序。 • 服务器端的包含程序如何运行。 • 如何查询浏览器和服务器,以便找到你要的信息。 20.1 HTTP通信概述 在第 1 7学时中,我们介绍了 We b浏览器( N e t s c a p e 和 Internet Explorer 等)与 We b 服务器 (Apache和IIS 等)之间如何进行基本的通信。该学时介绍的通信方式显得过分简单了一些。现 在我们对 CGI程序的使用变得更加得心应手了,因此可以更加深入地探讨这个问题。在本学时 的后面部分中,我们将要介绍进行这种通信时使用的一些方法,以便执行某些有意思的任务。 这种通信方式可以用一个协议来加以描述,这个协议称为超文本传输协议( HTTP) 。该协 议目前的两个版本是 HTTP 1.0 和HTTP 1.1 。在本学时介绍的一些例子中,两个版本均可适用。 描述 I n t e r n e t 上使用的这些协议的 I n t e r n e t 标准文档称为 “Request For C o m m e n t ( 说明请求 ) ”,即通常所说的 R F C 。 R F C 由I n t e r n e t 工程组负责维护, 你可以通过网址 h t t p : / / w w w. i e t f . o rg 在 We b 上查看。专门介绍 H T T P 的文档是 RFC 1945和RFC2616。请注意,这些文档的技术性很强。 当你的 Web浏览器初次与 Web服务器连接时,浏览器向服务器发送一条初始消息,它类似 下面的形式: G E T 用于指明你试图接收的是什么 U R L ,以及你想要接受的是哪个版本的协议。在这个 例子中,你接受的是 HTTP 1.0 版的协议。 c o n n e c t i o n行用于指明你希望这个连接为检索多个 We b页保持打开状态。按照默认设置, 浏览器为检索每一帧、每一页和 We b页上的每个图形分别建立一个连接。命令 k e e p - A l i v e 要求 服务器使连接保持打开状态,以便使用相同的连接检索多个项目。 下载 227 第20学时 对HTTP和CGI进行操作使用 Accept行用于指明通过这个连接你愿意接受何种类型的数据。第一个 Accept行的结尾处的 * / * 表示你愿意接受任何种类的数据。下一行( i s o - 8 9 5 9 - 1 等)表示字符编码可用于该文档。 在这个例子中, A c c e p t - E n c o d i n g表示 g z i p(GNU Zip )可用于对来自服务器的数据进行压缩, 以便加快传输速度。最后, Ac c e p t - L a n g u a g e 用于指明该浏览器能够接受何种语言(英语、大 不列颠英语、德语和法语等) 。 Host是你希望租用的 Web站点的系统名。由于可以使用虚拟租用,因此该系统名可以不同 于URL中的主机名。 最后一行,该浏览器将自己的身份通知 We b 服务器,这个身份是 M o z i l l a / 4 . 5 1 [ e n ] C c32f404p(WinNT; U ) 。在 Web技术中,该浏览器称为用户代理。 然后,服务器发送一个应答消息,它类似下面的形式: 这时,该应答消息后随你要检索的 Web页内容。 在这个消息中的 G E T行用于指明服务器是否将这个 We b 页发送给你。状态 2 0 0表示一切运 行正常。服务器还在 S e r v e r 行上标明自己的身份。在这个例子中,该服务器是 Netscape- Enterprise/3.51 G Web服务器。 C o n t e n t - L e n g t h行表示 2 2 2 2字节的内容将被发送给浏览器。使用这个消息,你的浏览器就 能够知道一个 We b 的内容完整性是 5 0 % 还是 6 0 %等。 C o n t e n t - Ty p e 是发送给浏览器的 We b 页的 种类。如果是 HTML 页,这一行就设置为 text/html。如果是图形页,它就设置为 image/jpeg。 Last-Modified日期表示自从该 Web页上次被索以来是否被修改了。大多数 Web浏览器都 将Web页缓存起来,这样你就可以两次阅读一个 Web页,这时,该日期就可以与浏览器已经拥 有的保存拷贝日期做比较。如果服务器上的 Web页尚未修改,就没有必要再次下载整个 Web页。 20.1.1 举例:人工检索Web页 如果你愿意的话,可以人工检索 We b页。当想要测定 We b 服务器发送的是否是正确的 We b 页时,常常可以使用这个特性。 若要运用这个特性,需要一个专门的程序,称为 Te l n e t 客户程序。 Te l n e t客户程序是个远 端访问程序,用于远程登录到 UNIX工作站。不过它常常用于执行调试 HTTP之类的任务。 如果你有一台 U N I X计算机,可能已经安装了 Te l n e t 。如果你拥有一台 Microsoft Wi n d o w s 计算机, Te l n e t 可能已经作为你的网络实用程序的一部分安装好了。你只需要打开 S t a r t菜单, 使用 Run 选项,就可以运行 Telnet 客户程序。如果尚未安装该程序,或者使用的是 Macintosh计 算机,你可以在任何较好的下载站点找到免费的 Telnet客户程序。 若要启动与 Web服务器的通信,请在提示符处输入下面这个 Telnet命令: 这里的 www.webserver.com 是We b服务器的名字, 8 0 是你想要连接到的端口号(端口 8 0通 常是 Web服务器接收信息的端口 )。如果你的 Telnet客户程序是个图形处理程序,你必须在对话 框中设置这些值。 228 使用第三部分 将Perl 用于 CGI 下载 当 Te l n e t 进行连接时,你可能看不到提示符或连接消息。请不必担心,这是正常的。 HTTP 期望客户机首先发出请求,而服务器却没有发出提示。在 UNIX下,你会得到一条消息, 其内容如下: 其他类型的系统,如 Windows和Macintosh,则看不到这条消息。 你必须认真和迅速地键入下面这行命令: 键入这行命令后,请按 E n t e r键两次。这时 We b 服务器应该作出响应,发出正常的 H T T P标 题和 Web 站点的顶层页,然后切断连接。 20.1.2 举例:返回非文本信息 你的 C G I 程序不一定将 H T M L信息返回给浏览器。实际上,你的浏览器能够检索的任何信 息, CGI程序都能够发送。 C G I模块中的 h e a d e r 函数告诉浏览器,它准备使用 M I M E 内容类型( C o n t e n t - Ty p e )标题 来接收何种类型的数据。 Content-Type标题用于描述后随的数据内容,这样,浏览器就知道如 何处理该数据。 按照默认设置, h e a d e r函数将一个 t e x t / h t m l的内容类型描述发送给浏览器。浏览器识别后 随的内容是带有 HTML的文本。 通过告诉浏览器将会收到不同类型的数据,你就可以控制浏览器如何来处理该数据。数 据可以作为图形来显示,也可以传递给浏览器的插件,甚至可以由浏览器启动的外部程序来 运行。 若要使 h e a d e r 函数能够发送非普通 t e x t / h t m l 标题的某些信息,请使用 - t y p e 选项,如下所 示: 可以发送给浏览器的某些常用 M I M E 内容类型是 t e x t / p l a i n (指不需要转换的文本) , i m a g e / g i f和 i m a g e . j p e g(指 G I F和J P E G 图形) ,以及 a p p l i c a t i o n / a p p n a m e(指应用程序 a p p n a m e 特定的数据) 。一种特殊的 M I M E内容类型称为 a p p l i c a t i o n / o c t e t - s t e a m ,它是指浏览器应该保 持到一个文件的原始二进制数据。 如果你需要创建一个“当日图形”的 Web站点,或者创建一个 Web标题广告,就可以使用 这种内容类型。每天修改 We b 页,以便反映新图形的变化情况,这是很麻烦的。如果你出差 在外,谁为你更新“当日图形”呢?为此,你可以使用一个静态 HTML页,并且使用 Perl CGI 程序,每天自动产生一个不同的图形。 在你的 Web页中,使用下面这样的 HTML代码: 在上面这个 HTML代码中,请注意<IMG>标记的目标是个 CGI程序,不是.gif或.jpg。接着, 你需要一个放满图形的目录,图形的数量至少要与一个月的天数相同。你可以调用你喜欢的 229 第20学时 对HTTP和CGI进行操作使用 下载 任何图形,只要文件名以 .jpg结尾即可。请注意,该程序能够非常容易地使用 GIF 图形。 CGI程序 daily_image.cgi类似程序清单 20-1所示的形式。 程序清单 20-1 当日图形的代码 第7行:这一行用于设定图形所在的目录。可以修改这个设置,以指明你将图形放在什么 位置。 第8 行:这一行非常奇怪,因为这个 C G I 程序并不输出文本,并且因为它嵌入到的 H T M L 页时并不将输出显示为文本,你不能只是输出出错消息。如果无法打开 $ i m a g e d i r 目录,则变 量$error包含将要显示的 .jpg文件的名字。 第1 0 ~ 1 6行:这个子例程将图形显示在标准输出中,它将发送到浏览器。在 Wi n d o w s 平台 上, STDOUT被视为一个文本文件,将 .jpg输出到 STDOUT将会损坏图形。因此, binmode用于 使 S T D O U T和I M A G E 成为二进制文件句柄。在 U N I X下,你不需要使用 b i n m o d e ,但是它不会 造成损害。请注意第 12行,如果图形打不开,就没有必要输出出错消息,程序只要退出即可。 第1 9 行:这一行用于输出标准 H T T P 标题,不过 C o n t e n t -Ty p e 将是 i m a g e / j p e g,而不是通 常的 text/html 。 第2 5行:图形目录被打开以便读取。如果图形目录没有打开,那么便用错误图像 $ e r r o r来 调用函数 display-image () 。 第2 6 行:这一行比较复杂,因此要循序渐进来操作。首先用 r e a d d i r 读取目录。然后从该 列表中取出以 .jpg结尾的文件名。最后,对产生的列表进行排序,并赋予 @jpegs。 230 使用第三部分 将Perl 用于 CGI 下载 20.2 如何调用CGI程序的详细说明 到现在为止,我们介绍了启动 CGI程序时使用的两种方法。第一种方法也是最简单的方法 是通过一个链接来调用 C G I程序的 U R L ,或者让用户将 U R L键入浏览器。因此类似下面的这 行代码可以用于启动和运行称为 time.cgi的程序: 当通过该链接进行操作时, C G I 程序 t i m e . c g i 将由服务器运行,它的输出则作为一个新 Web页来显示。这个示例代码简单明了,容易操作,与第 17学时中的“ Hello, World!”很相 似。 启动 C G I 程序的另一个方法是使它成为一个 H T M L填充式窗体的目标程序。例如,当单击 Subamit按钮时,下面这个窗体便调用 CGI程序 process.cgi: 这个调用 C G I程序的方法具有另一个优点,即你可以将参数传递给 C G I 程序,以便进行处 理。好了,这就是 HTML窗体的总体情况。 20.2.1 将参数传递给CGI程序 通过链接将信息传递给 Perl程序,这是不是很好呢?例如,是否可以在文档中设置一个点 击的链接,它将“运行 CGI程序 foo.cgi,其 X值等于 this,Y值等于 that”呢?你稍加努力,就 可以达到这个目的。 首先必须在 <A HREF> 标记中使用一种特殊的 URL。该 URL的格式在图 20-1中做了说明。 图 20-1 包 含 各 个 参 数 的 指明后随的参数 URL 服务器的名字 协议名 参数分隔符 参数值 参数值 CGI 程序的路径名 参数名 参数名 每个参数都是你想要传递到 C G I 程序中的一个值的名字(类似一个指明的 H T M L 窗体元 素),该值是该名字的值。例如,若要创建一个链接,单击这个链接时,它将运行一个 C G I程 序,其参数 sign设置为 Aries ,year设置为 1969,那么你可以输入下面这行代码: 在这个 CGI程序中,它的参数将像通常那样由 CGI模块的 param函数进行处理: 231 第20学时 对HTTP和CGI进行操作使用 下载 你 可以根据需要传递任意数量的参数如果你想传递一个空参数,即没有值的参数,只 需要像下例中的 author那样将它置空即可: 20.2.2 特殊参数 当你调用带有此类参数的 CGI 程序时,应该了解使用某些特殊参数时要考虑的问题。某些 字符属于特殊字符,不能成为 U R L 的组成部分。例如,?(问号)是个特殊字符,它可以作 为URL的主要部分与参数之间的分隔标号。其他特殊字符还有 &、空格和引号等。 特殊字符的完整列表在 Internet标准文档 RFC 2396 中列出。 若要将这些特殊字符中的某一个插入 U R L ,你必须对字符进行转义。在这种情况下,对 字符进行转义意味着应该将它的 ASCII值转换成一个两位数十六进制数字,并在它的前面加上 一个百分比符号。对“ Hello,World!”的编码如下所示: 显然,创建一个 URL转义字符串是非常麻烦的。 CGI模块提供了一个函数,它能够自动为 你创建这样的字符串。下面这个代码段展示了如何输出一个带有正确编码的 URL: 上面这个代码可以产生一个正确进行 U R L字符转义的 H T M L 链接。请注意 CGI 模 块是如 何用于代码的 use CGI qw ( :all escape );。如果你使用 C G I 模块,那么 e s c a p e 函数通常不能 供你的程序使用,你必须显式要求使用该函数。 下面这个程序创建了一个带有转义值的长得多的 URL: 232 使用第三部分 将Perl 用于 CGI 下载 当 C G I程序用 p a r a m 函数取出这些参数时,在 U R L 的结尾处的最后一个 & 将被该 C G I 程序 忽略。 20.3 服务器端的包含程序 当你设计 We b 页时,该页上的最常见的内容是静态的。有时该页的某些部分要进行修改, 但是总的来说,该页的内容将保持不变。请看这样一个 We b页,它显示了一家公司的当前股 票价格。该页的主要部分是静态的,比如导航栏、图形、徽标、使用信息、页眉、页脚和标 题等。该页的重要部分,即股票价格,是通过读取某处的数据库和填写空格来生成的。 为了帮助你创建这种 Web页,大多数 Web服务器都支持一个特性,称为服务器端的包含程 序( S S I ) ,也称为服务器分析的 H T M L 。该特性使得 We b 站点的开发者能够创建基本静态的 HTML We b 页,并使该页的某些部分由 We b服务器在运行中重新编写(见图 2 0 - 2 ) 。可以将该 Web页视为填空式 HTML文件,而 CGI程序则为你将数据填入空格。 Web 服务器 图 20-2 当 H T M L 页被处理 时, We b 服务器将 数据填入该页 送往浏览器 的Web页 服务器处理 的Web页 w/SSI页 你的服务器管理员必须激活 SSI,使这些示例代码能够运行。为了使服务 器能够正确地读取带有嵌入式 S S I 的 H T M L ,有时你必须为 H T M L 赋予带 有.shtml或.stm扩展名的名字。请与你的服务器管理员联系,以便了解 SSI是如 何在你的特定Web服务器上使用的,因为它支持的命令及其语句是各不相同的。 当 We b 服务器从磁盘上读取静态 H T M L 页时,它要寻找它能够替换的各个值的“标记” 。 在服务器分析的 H T M L 页中的 Apache We b 服务器下,标号 <!--#echo var= “ L A S T _ M O C I F I E D ”- - > 将使 A p a c h e能够替换标记中该 We b 上次被修改的日期。浏览器看不到这个进 程的发生,它只看到服务器替换时的这个日期。下表说明了这个进程的情况: Web 页 转换成的内容 233 第20学时 对HTTP和CGI进行操作使用 下载 (续) Web 页 转换成的内容 Web服务器实现SSI的方法各有差异。有时标记的句法各不相同,有些服务 器支持某些种类的标记,但是有些服务器则不支持这些标记。有些Web服务器根 本不支持SSI。例如,Microsoft的Personal Web服务器就不支持SSI。本学时中使用 的SSI HTML标记与Apache Web服务器及Microsoft的Internet Information服务器的 标记是兼容的。在撰写本书时,后面两种服务器是 b上最流行的Web服务器。 We 本学时并不打算全面介绍 S S I的所有特性,因为这些特性的数量太多,而且大多数特性是 某些特定品牌的 Web 服务器所特有的。我们的目的是要介绍 SSI标记 #exec。你可以像下面这样 将SSI #exec标号用于 HTML 文件: 当We b服务器遇到这个 # e x e c标记时,它将停下来执行 s t o c k p r i c e . c g i这个 C G I程序。该 C G I 程序的输出在送往浏览器时被插入 H T M L 数据流。当 C G I程序完成运行时, # e x e c 标记后面的 HTML 文件的剩余部分被送往浏览器。 举例:使用SSI 在这个例子中,你将创建一个简单的 We b 页,用于输出“ Hello,World” ,然后根据一天中 的时间,输出一个定制图形。首先你需要两个图形,一个用于晚上,另一个用于白天,如图 20-3 所示。 图 20-3 白 天和晚上使用的 两个图形: d a y. j p g 和night.jpg day. jpg night. jpg 然后你需要一个 H T M L 样板文件,它带有问候你的信息,如下面的代码所示。如果你为 自己创建这个文件,请记住必须在给 H T M L文件命名时使用扩展名 . s h t m l或 . s t m ,以便使服务 器能够识别 SSI标记。 234 使用第三部分 将Perl 用于 CGI 下载 在程序 sunmoon.cgi中,可以使用程序清单 20-2所示的代码。 程序清单 20-2 白天和晚上的问候程序 第 3行:由于这是个 CGI 程序,因此你应该使之包含 C G I模块。 q w (: a l l )用于确保你能 够使用需要的任何函数。 第6 行:列表上下文中的 l o c a l t i m e返回一个描述当前时间的元素列表。这个问题已经在第 4 学时中做了介绍。 localtime前后的括号将它置于一个列表上下文中, [2]则使该列表的第三个 元素得以返回,并赋予 $hour 。元素 #2是用 24小时的格式来表示的时间。 第1 5 行:标题仍然必须使用 C G I 的h e a d e r函数来输出,尽管这个输出显示在整个 We b 页的 中间位置上。 第16行: <IMG>标记既可以用 $day的值来输出图形,也可以用 $night的值来输出图形。如 果浏览器无法显示图形,则使用 ALT(替代)标记。 当浏览器在上午 8点钟检索 Web 页时,产生 Web页的源代码将如下所示: 20.4 部分环境函数简介 到现在为止, 来自 CGI模块的大多数函数都是用于控制浏览器的 (如 redirect或header函数) , 或者用于处理传递给 C G I程序的参数(如 e s c a p e 和 p a r a m函数) C G I模块中的全部函数都是为 。 了向你提供关于你当前正在运行的系统的信息的。表 2 0 - 1 显示了部分函数的列表,如果你要 查看完整的列表,请在命令行提示符处键入 perldoc CGI,以便查看 CGI模块的在线文档。 235 第20学时 对HTTP和CGI进行操作使用 下载 这些函数大多需要使用Web服务器提供的值,或者使用Web浏览器使用HTTP 协议发送的值。Web浏览器可能提供某些虚假的值,比如eferer值或use_agent,Web r 服务器有时也会返回不准确的值,例如,erver_name并不总是返回你期望的值。 s 表20-1 部分环境函数一览表 函 数 referer user_agent remote_host script_name server_name virtual_host 说 明 返返回将你发送到该 Web 页的链接的 URL 。 (不错,这个函数拼写错了。原先描 述这个域的 Internet标准包含一个拼写错误,现在国际上也将错就错,以便做到 统一。 ) 返返回一个字符串,用于指明要求检索 We b 页的浏览器的种类(如 N e t s c a p e 、 IE 、Lynx) 返返回要求检索 We b 页的系统的主机名或 I P 地址。你究竟会得到哪个值,取决 于你的 Web服务器的配置和是否存在主机名 返返回正在运行该程序的程序名,作为部分 URL (如 /cgi-bin/foo.cgi ) 返返回托管 CGI 程序的服务器的名字 返返回用于行该CGI程序的虚拟主机名。该函数不同于server_name,因为一个服 务器常常能够托管多个Web站点。Virtual_host返回被访问的特定Web站点的名字 下面是用于展示这些函数的一个短程序: 在一个测试用的 Web服务器上运行该程序,将产生下面的结果: 20.5 重定向 C G I程序中可以使用的一个非常有用的方法称为 H T T P重定向。当想要根据某个计算值让 CGI程序加载另一个 Web页时,就可以使用重定向。 例如,如果你有一连串的 Web页要送往一个特定的浏览器,比如,这些 Web页包含一个插 件,而这个插件只有在 Microsoft Wi n d o w s 的N e t s c a p e 浏览器下才能使用,那么可以将该 We b 236 使用第三部分 将Perl 用于 CGI 下载 站点的访问者送往同一个 U R L ,并让一个 C G I程序将他们重定向到正确的 We b 页。图 2 0 - 4说明 了这个情况。 浏览器 图 20-4 一个 We b 站点重定 向到另一个 We b 站 a. 取Web页 点 Web 站点Y Web 站点X c. 实际的Web页 b. 重定向CGI 程序 若要实现重定向,需要使用 CGI模块的 redirect 函数。 redirect 函数用于对前面介绍的 HTTP 通信进行操作,并使浏览器能够加载一个新 Web页。 程序清单 2 0 - 3 包含一个短程序,用于将 Wi n d o w s 下的 N e t s c a p e 用户重定向到一个 We b 页, 并将所有其他浏览器重定向到另一个 Web 页。 程序清单 20-3 根据浏览器进行重定向 第9行:在 $browser中抓取浏览器类型。 第10行:默认 URL被放入 $target中。任何非 Netscape浏览器均被送往这里。 第 1 3 ~ 1 4行:存放在 $ b r o w s e r 中的浏览器类型被核实,以确定它是否包含 M o z i l l a 或 Wi n, 如果包含,则赋予一个新目标地址。 第16行:重定向消息被发送到浏览器。 通过 C G I 的重定向是天衣无缝的,而通过其他方法(如使用 J a v a S c r i p t 和 H T M L 扩展名) 进行的重定向则存在许多问题。并非所有平台都支持 J a v a S c r i p t ,使用 J a v a S c r i p t 中的 w i n d o w. l o c a t i o n . h r e f 赋值语句可能无法产生正确的结果。如果将 H T M L 的 < M E TA HTTPE Q U I V =“ r e f r e s h ”> 标记用于重定向,就会在重定向进行之前产生明显的延迟,因为浏览器 必须在重定向发生之前全部加载 Web页。 JavaScript也同样存在这个问题。 HTTP重定向是在发 送任何 HTML之前发生的,并且几乎是即时进行的。 237 第20学时 对HTTP和CGI进行操作使用 下载 对于 CGI模块的 user_agent函数, e t s c a p e的浏览器将自己标识为 M o z i l l a 。 N 这个名字是图形 We b 浏览器原先的名字 M o s a i c 的变形。 Windows 95 下的典 型 Netscape 4.51 浏览器返回的 u s e r _ a g e n t 名字类似 M o z i l l a / 4 . 5 1 -( Wi n 9 5 ; I) 。 20.6 课时小结 在本学时中,我们介绍了从服务器中检索 We b 页时程序运行的情况,并且简要地讲述了 HTTP协议。还介绍了如何通过链接来调用CGI程序,并将参数传递给程序,这可以用于SSI。此 外,还介绍了如何进行HTTP通信,以便执行重定向操作,并获取关于浏览器和服务器的信息。 20.7 课外作业 20.7.1 专家答疑 问题: SSI示例代码似乎无法运行,为什么? 解答: SSI代码不能运行的原因很多。首先,应该检查你的 Web浏览器是否支持 SSI,并非 所有的 Web浏览器都支持 SSI。其次,应该确保 Web 服务器激活了 SSI特性。第三,应该确保你 的 H T M L 文件拥有正确的扩展名,以便激活 S S I。你可以与服务器管理员取得联系,了解上述 信息。最后,应该确保你的 HTML SSI标号使用的句法的正确。 如果你使用 <!--#exec cgi--> 标记,应该确保你在不使用 S S I来运行程序时你的 C G I程序运 行正确。 在We b页已经加载的情况下使用浏览器中的“ view source (查源代码) ”选项,就能够 知道服务器是否正在执行你的 S S I 程序。如果你看到 We b 页源代码中的 S S I 标记,服务器就不 能识别和分析它们。 问题: Telnet 示例代码无法运行,为什么? 解答: 如果 Te l n e t未能建立连接,那么应该确保你是针对 We b服务器的名字来使用 Te l n e t 的,并且使用的端口是正确的,也许它是端口 80 。你必须查看 Telnet 客户程序的文档,以便正 确地设置端口号。 另一个常见问题是你无法看到自己键入的字符。有些 Te l n e t 客户程序能够将你键入的字符 反馈给你,有些则不能。请不必对此担心,你只需要认真进行操作就行了。这些字符必须认 真发送。当你键入 GET行后,务必按两下 Enter键。 20.7.2 思考题 1) 下面这个 URL能够按照你的期望运行吗? <A HREF=" /cgi/foo.pl? name=Ben Franklin&Job=printer"> a. 是。 b. 否。你不能像这样将两个参数传递给一个 CGI 程序。 c. 否。名字 Ben Franklin 中的空格是不允许的。 238 使用第三部分 将Perl 用于 CGI 下载 2) 服务器端的包含程序由什么来进行处理和展开? a. 浏览器。 b. Web 服务器。 c. 操作系统。 20.7.3 解答 1) 答案是 c。你应该使用转义符正确地隐藏空格和其他特殊字符。 2) 答案是 b 。We b 服务器负责将 SSI HTML 标记转换成它们的值,然后将它们发送给浏览 器。 20.7.4 实习 • 使用 Telnet客户程序,连接到你喜欢的 Web站点之一,并设法人工检索 Web页。 ...
View Full Document

This note was uploaded on 11/27/2011 for the course CS Perl taught by Professor Guo during the Spring '09 term at Xiamen University.

Ask a homework question - tutors are online