爱问知识人 爱问教育 医院库

CGI设置问题

首页

CGI设置问题

我在服务器上配置CGI程序
开始用的是perl.exe,执行CGI程序都报:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.

后来改用perlis.dll又提示:
'E:\xxx\xxx\xx\ i' script produced no output 

请教高手

提交回答
好评回答
  • 2005-10-29 14:58:20
      我提供下列关于CGI的设计内容,希望能帮上你的忙……
    1。 定义:
    CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
    2。 功能:
    绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。
      CGI程序使网页具有交互功能。 3。 运行环境: CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。
       4。 CGI处理步骤: ⑴通过Internet把用户请求送到服务器。 ⑵服务器接收用户请求并交给CGI程序处理。 ⑶CGI程序把处理结果传送给服务器。 ⑷服务器把结果送回到用户。 5。 CGI服务器配置: CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
       配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。 ⑴CREN格式服务器的配置: 编辑CREN格式服务器的配置文件通常为/etc/ nf/,在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*。
      exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: ⑵NCSA格式服务器的配置 在NCSA格式服务器上有两种方法进行设置: ①在 nf文件(通常在conf目录下)中加入: Script Alias/cgi-bin/cgi-bin/ Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。
       ②在 nf文件加入: Add type application/ i 此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。 在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。
       6。 CGI的编写语言 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中: · Perl (Practical Extraction and Reporting Language) · Bourne Shed或者Tcl (Tool Command Language) Windows环境中: · C和C++ 由于Internet上大部分服务器使用的是UNIX操作系统,且几乎任一UNIX操作系统中都有Bourne Shell,因而后面讲述的例子中大部分是用Bourne Shell编写的。
       7。 CGI环境变量列表 SERVER-NAME:运行CGI序为机器名或IP地址。 SEUVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。 SERVER-PROTOCOL:通信协议,应当是HTTP/1。0。
       SERVER-PORT:TCP端口,一般说来web端口是80。 HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。 HTTP-REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量) HTTP-USER-AGENT:发送表单的浏览器的有关信息。
       GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1。1。 PATH-TRANSLATED:PATH-INFO中包含的实际路径名。 PATH-INFO:浏览器用GET方式发送数据时的附加路径。 SCRIPT-NAME:CGI程序的路径名。
       QUERY-STRING:表单输入的数据,URL中间号后的内容。 REMOTE-NOST:发送程序的主机名,不能确定该值。 REMOTE-ADDR:发送程序的机器的IP地址。 REMOTE-USBR:发送程序的人名。 CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。
       CONTENT-LENGTH:POST方法输入的数据的字节数。 1。CGI数据传送方法: 客户有两种方法: ⑴通过环境变量,采用GET方式: … 该法简单,但用cethod=get方式通过变量传送数据会因变量接受的数据量有限而产生数据丢失。
       ⑵通过标准输入,采用POST方式──建议使用方式 标准输入法是通过method=post方式把数据传送到网关程序的入口。数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于此法对数据量没有限制,因而传输中不会产生数据丢失。
       2。输入数据URL编码 URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参数值”,同时把那此不能直接传输的数据转化为16进制。然后根据使用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务器。
       3。 CGI程序的特点 CGI程序是一种在www服务器上运行的程序,主要用于处理用户通过表单输入的信息,在服务器上产生相应的作用,或把处理结果反馈给浏览器,CGI程序须符合以下两个条件: ⑴CGI程序的输出要写标准输出这样,服务器才能解释这一输出,并把它返回到浏览器。
       ⑵CGI程序的数据头要告诉服务器如何处理该程序的输出 为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊的头作为第一个输出行,数据头可以是下列三种之一: ①数据类型(Content-type),如:Content-type: text/html ② 地址类型(Location),如:Location://www。
      w3。0rg ③状态类型(Status), 如:Status:204 No Respouse 4。CGI程序格式 CGI程序同下列三部分构成: ⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据都是经过URL编码的,必须进行解码。
      如果不需要处理表单输入,该部分可省略。 ⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一: ①数据类型(Content-type), 如:Content-type: text/html ②地址类型(Location),如:Location:// ③状态类型(Status), 如:Status:204 No Respouse ⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出到标准输出。
       5。CGI程序的数据类型: 若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数据类型的头,它将告诉浏览器如何解释该输入。 例1:如服务器要判断回一个HTML文件,则CGI程序中的类型头应定义为: Content-type:text/html 例2:如服务器要送回的文件类型是JEPG文件,则CGI程序中的类型头应定义为: Contert-type:image/jpg 其余的数据以此类推。
       6。CGI程序的地址类型 若用户想在服务器上打开或加载一个现有的文件,则须在CGI程序中使用表示地址类型的头。 表示地址类型的头的值可以是一个URL全地址,也可以是去掉http:和主机名的URL地址。 例1:Location: 例2:Location: 例3:Location: Book/ ml 7。
      CGI程序的状态类型 如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须在CGI程序中加入表示状态类型的头。状态码由HTTP定义。 例:Status: 204 No Response 此状态码表示这时浏览器不能从服务器得到任何反馈信息,即服务器上的CGI程序只是对输入进行处理而不作应答,浏览器界面保持不变。
       8。CGI程序示例 下面是一个检索约翰是否登录的例子: #!/bin/sh 数据头部分,声明数据格式 echo"Content-type:text/html" 为文本格式 echo 此处省略了解码部分 echo"" echo"约翰登录了吗?" echo"" ison='who I grep lemay' 查询登录信自己 , if[-z"Sison:]; 并向标准输出设备 then echo"约翰登录"。
       输出查询到的信息。 elso echo"约翰未登录"。 fi echo"" 1。 处理表单的CGI程序 表单允许用户输入各种信息,而通常CGI程序和带参数的CGI程序不能处理客户的输入或只能处理带硬编码参数的程序。因此出现了专门处理表单的程序。
      处理表单的CGI程序的编写须注意那些与表单有关的因素。 编写一般步骤为: ⑴由于表单传给CGI程序的数据是经URL编码的,因而编写前需调用cgiparse、uncgi或 程序对输入进行解码。 ⑵输出标准数据类型标题,地址类型标题或状态类型标题,这些标题后要以两个\n(换行)字符结尾。
      第一个\n表示换行,第二个\n表示标题后面的空行。 ⑶输出对应版面开头部分的HTML程序。 2。URL编码规则 URL编码就是由浏览器把通过表单输入的数据──变量/变量值转化为参数/参数值,同时把那些不能直接传输的符号,如:&,%,+转化为16进制。
       编码规则: 参数/参数值对之间用“&”分隔,空格用“+”代替 参数与参数值之间用“=”分隔,如果参数未赋值,参数也同样出现在编码中,如:“姓名=”。 一些特殊符号:&,%,+转化为带%的16进制数:%NN。 例:URL编码:姓名:张三 & 性别:男 & 民族:汉 3。
      URL编码的解码 可以根据编码规则和环境变量,自己编写解码程序,也可直接使用现成的解码程序。 ⑴使用解码程序cgiparse制作CGI: cgiparse:这是处理GET方式和POST方式的很有用的程序,是CERN格式服务器程序的一部分,如果服务器为其它格式,请选用其它解码程序。
       使用CGIPARSE程序时,需根据不同的表单式输入采取相应的参数在CGI程序的开头调用CGIPARSE程序。 若使用GET命令发送表单输入,则cgiparse程序使用form选项将参数名/参数值对进行解码并存入与变量同名的Shell环境变量中,只是在名字前面加上form_前缀,即若变量原来为mybook,cgiparse产生的环境变量为FORM_mybook。
       在Bourne shell中程序调用cgiparse处理GET输入格式为eval/home/www/cgi-bin/cgiparse-form,若使用POST命令地送表单输入,可以有几种途径处理输入。其中最简单的方法是,使用_init选项,从标准输入读入输入量,并把它存入环境变量QUERY_STRING中,然后选择_form选项调用cgiparse对参数名/参数值对进行解码,并存入环境变量中。
       因此在Shell程序中调用cgiparse处理POST输入需两行命令: eval/home/www/cgi-bin/cgiparse-init eval/home/www/cgi-bin/cgiparse-form 例:#!/bin/sh eval/home/www/cgi-bin/cgiparse-init --- 第一部分: |--码,采用eval/home/www/cgi-bin/cgiparse-form --- cgiparse的POST方式 echo"Conetnt-type:text/html" --- 程序第二部分: |-- 数据头, echo --- 数据类型为文本格式html文档,注意应有一空行 echo"" -------- echo"Sleepometer Results | " | echo"Results: | if [!-z "$FORM_the Name"]; 程序主体部分: then echo"$FORM_the Name is" 处理表单输入 else echo"A Person with no name is" 注意输入数据 fi 的格式 if["$FORM_sheepy"="yes"]; | then echo"sleepy" | else echo"Not sleepy" | fi echo" -------- ⑵使用uncgi解码程序设计CGI程序 uncgi:用C语言写成,处理方式与cgiparse类似,但比cgiparse易得到并能更好地处理POST方式的输入,可从: / ml/得到有关信息。
      uncgi最好安装在目录cgi-bin中,编译前应修改Makefile文件,使其中的目录路径和你使用的系统一致。uncgi程序从用GET或POST方式输入数据中的表单中读入输入并解码,然后产生一组变量,这些变量都加上了www_前缀,如:原来的特征变量为 the work和playing,现在则对应为 www_the work和www_playing,对于多个参数名/参数值对使用相同名字时,只产生一个环境变量,每个变量值用#符号分开,如:参数名/参数值对为playing=baskeball, playing=baseball,则环境变量FORM_PLAYING的值为baskeball#baseball。
      使用uncgi程序时,需对FORM标注中的ACTION特征量作一点修改,不能在ACT\ON中直接调用,必须附上程序名,如:需改为 例: #!/bin/sh cgi程序的数据头部分: echo"Content=type:text/html" --- 使用uncgi|-- 解码程序时,echo --- 不需要解码部分,调用cgi时,自动调用uncgi进行解码。
       echo"" --------- echo"Sleeppometer Results | " | echo"" | echo"Results:" | if [!-z"$www_the Name"]; cgi程序主体部分: then echo"$www_the Name is" 其中对两个表单变量else echo"A person with no the Name和sleepy name is" 进行了处理 fi | if ["$www_sleepu"="yes"]; | then echo"sleepy。
      " | else echo"Not sleepy。" | fi | echo"" --------- ⑶使用 解码设计CGI程序 用perl语言编写,它从GET或POST读入表格是输入并存放在数组中。可从 软件包,是由Steve Brener用perl编写的,它可以从用GET或POST方式输入的表单中读入表单式输入,并存放在一个perl表或相应的数组中,用户可以从地址 用户若要使用cgi-lib,则可以从上述URL中取出源程序,并把它放在用户的perl目录中,且在用户程序中用命令veguire' '把库目录中的程序包含进程序中。
       包含好几个管理表单的程序,Read Parse是 软件包中最重要的一个表单管理软件。它能从用GET或POST输入的表单中读入输入值,并把输入值以参数名/参数值对的形式放入相应的perl数组中。 Read Parse命令的调用格式为:& Read Parse(*数组名) 对于多个参数名/参数值使用相同的名字时, 会将数组中的值用\0空字符)分开。
       例:#!/user/local/bin/perl cgi程序的第一部分: require‘ ’; --- 调用 软件包|---中的Read Parse &lead Parse(*in); --- 程序进行解码,结果放在数组in中 cgi程序的数据头部分: print"Content_type:text/html\n\n"; ---说明数据是文本格式的html文档’,“\n\n”表示打印一个空行 print“”; -------- print“Sleeppometer Results | ” ; | print“”; | print“Results:”; cgi程序 if [$in{‘the Name’}] 的主体部分: [ print“$in{the Name}is”;] 注意对表单输 else{print“A Person with no 入变量的处理, name is”;} 变量存放在数 if [$in{‘sleepy’}eq yes] 组in中 {print“sleepy。
      ”} | else{print“not sleepy。”;} | print“”; -------- 4。 带参数的CGI程序 使CGI程序通用化是非常重要的,从前面检查登录CGI的程序可知,若要检查不同人的登录情况,则需编写同样的CGI程序,但对于同样的情况,只需编写一个带参娄的CGI程序,如:只需将示例程序中的Ison:‘who I grep约翰’语句改为ison:‘who I grep“$第几个变量”’即可。
      把参数赋给CGI程序,用如下方法连接: ”clink hear。 连接中问号后的 g3为将传给cgi-bin/myscript的参数,它们用“+”分开。 下面举一个检查珍妮是否登录的例子: #!/bin/sh echo“Covtent_type:text/html” echo echo“” echo“你登录了吗?” echo“” ison=“who I grep‘$2’” if[-z“$ ison”]; the echo“珍妮已登录。
      ” else echo“珍妮未登录。” fi echo“” 用户只需通过珍妮登录了吗?即可在浏览器中显示珍妮是否登录的界面。 5。 NPH(无处理头)程序 NPH(non-processed headers)程序即非解释文件头程序,是为了加快服务器往浏览器传文件的速度,编写这种程序须按照以下格式: ⑴程序中需有一个nph前缀,如nph_pinglanra。
       ⑵程序除了原有的数据类型头、地址头及状态头外,还需加入HTTPD头。HTTPD头分为两部分: ① HTTP/1。0加上状态码,如:HTTP/1。0 2000k状态码200,表示“一切正常,数据已送走。” ② 服务器头,它能显示出运行的服务器的版本号,如: Server: NCSA/1。
      3 Server: CERN/3。0 PRE6 。

    1***

    2005-10-29 14:58:20

其他答案

    2005-11-10 13:28:36
  •   我提供下列关于CGI的设计内容,希望能帮上你的忙……
    1。 定义:
    CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
    2。 功能:
    绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。
      CGI程序使网页具有交互功能。 3。 运行环境: CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。
       4。 CGI处理步骤: ⑴通过Internet把用户请求送到服务器。 ⑵服务器接收用户请求并交给CGI程序处理。 ⑶CGI程序把处理结果传送给服务器。 ⑷服务器把结果送回到用户。 5。 CGI服务器配置: CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
       配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。 ⑴CREN格式服务器的配置: 编辑CREN格式服务器的配置文件通常为/etc/ nf/,在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*。
      exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: ⑵NCSA格式服务器的配置 在NCSA格式服务器上有两种方法进行设置: ①在 nf文件(通常在conf目录下)中加入: Script Alias/cgi-bin/cgi-bin/ Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。
       ②在 nf文件加入: Add type application/ i 此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。 在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。
       6。 CGI的编写语言 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中: · Perl (Practical Extraction and Reporting Language) · Bourne Shed或者Tcl (Tool Command Language) Windows环境中: · C和C++ 由于Internet上大部分服务器使用的是UNIX操作系统,且几乎任一UNIX操作系统中都有Bourne Shell,因而后面讲述的例子中大部分是用Bourne Shell编写的。
       7。 CGI环境变量列表 SERVER-NAME:运行CGI序为机器名或IP地址。 SEUVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。 SERVER-PROTOCOL:通信协议,应当是HTTP/1。0。
       SERVER-PORT:TCP端口,一般说来web端口是80。 HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。 HTTP-REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量) HTTP-USER-AGENT:发送表单的浏览器的有关信息。
       GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1。1。 PATH-TRANSLATED:PATH-INFO中包含的实际路径名。 PATH-INFO:浏览器用GET方式发送数据时的附加路径。 SCRIPT-NAME:CGI程序的路径名。
       QUERY-STRING:表单输入的数据,URL中间号后的内容。 REMOTE-NOST:发送程序的主机名,不能确定该值。 REMOTE-ADDR:发送程序的机器的IP地址。 REMOTE-USBR:发送程序的人名。 CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。
       CONTENT-LENGTH:POST方法输入的数据的字节数。 1。CGI数据传送方法: 客户有两种方法: ⑴通过环境变量,采用GET方式: … 该法简单,但用cethod=get方式通过变量传送数据会因变量接受的数据量有限而产生数据丢失。
       ⑵通过标准输入,采用POST方式──建议使用方式 标准输入法是通过method=post方式把数据传送到网关程序的入口。数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于此法对数据量没有限制,因而传输中不会产生数据丢失。
       2。输入数据URL编码 URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参数值”,同时把那此不能直接传输的数据转化为16进制。然后根据使用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务器。
       3。 CGI程序的特点 CGI程序是一种在www服务器上运行的程序,主要用于处理用户通过表单输入的信息,在服务器上产生相应的作用,或把处理结果反馈给浏览器,CGI程序须符合以下两个条件: ⑴CGI程序的输出要写标准输出这样,服务器才能解释这一输出,并把它返回到浏览器。
       ⑵CGI程序的数据头要告诉服务器如何处理该程序的输出 为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊的头作为第一个输出行,数据头可以是下列三种之一: ①数据类型(Content-type),如:Content-type: text/html ② 地址类型(Location),如:Location://www。
      w3。0rg ③状态类型(Status), 如:Status:204 No Respouse 4。CGI程序格式 CGI程序同下列三部分构成: ⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据都是经过URL编码的,必须进行解码。
      如果不需要处理表单输入,该部分可省略。 ⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一: ①数据类型(Content-type), 如:Content-type: text/html ②地址类型(Location),如:Location:// ③状态类型(Status), 如:Status:204 No Respouse ⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出到标准输出。
       5。CGI程序的数据类型: 若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数据类型的头,它将告诉浏览器如何解释该输入。 例1:如服务器要判断回一个HTML文件,则CGI程序中的类型头应定义为: Content-type:text/html 例2:如服务器要送回的文件类型是JEPG文件,则CGI程序中的类型头应定义为: Contert-type:image/jpg 其余的数据以此类推。
       6。CGI程序的地址类型 若用户想在服务器上打开或加载一个现有的文件,则须在CGI程序中使用表示地址类型的头。 表示地址类型的头的值可以是一个URL全地址,也可以是去掉http:和主机名的URL地址。 例1:Location: 例2:Location: 例3:Location: Book/ ml 7。
      CGI程序的状态类型 如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须在CGI程序中加入表示状态类型的头。状态码由HTTP定义。 例:Status: 204 No Response 此状态码表示这时浏览器不能从服务器得到任何反馈信息,即服务器上的CGI程序只是对输入进行处理而不作应答,浏览器界面保持不变。
       8。CGI程序示例 下面是一个检索约翰是否登录的例子: #!/bin/sh 数据头部分,声明数据格式 echo"Content-type:text/html" 为文本格式 echo 此处省略了解码部分 echo"" echo"约翰登录了吗?" echo"" ison='who I grep lemay' 查询登录信自己 , if[-z"Sison:]; 并向标准输出设备 then echo"约翰登录"。
       输出查询到的信息。 elso echo"约翰未登录"。 fi echo"" 1。 处理表单的CGI程序 表单允许用户输入各种信息,而通常CGI程序和带参数的CGI程序不能处理客户的输入或只能处理带硬编码参数的程序。因此出现了专门处理表单的程序。
      处理表单的CGI程序的编写须注意那些与表单有关的因素。 编写一般步骤为: ⑴由于表单传给CGI程序的数据是经URL编码的,因而编写前需调用cgiparse、uncgi或 程序对输入进行解码。 ⑵输出标准数据类型标题,地址类型标题或状态类型标题,这些标题后要以两个\n(换行)字符结尾。
      第一个\n表示换行,第二个\n表示标题后面的空行。 ⑶输出对应版面开头部分的HTML程序。 2。URL编码规则 URL编码就是由浏览器把通过表单输入的数据──变量/变量值转化为参数/参数值,同时把那些不能直接传输的符号,如:&,%,+转化为16进制。
       编码规则: 参数/参数值对之间用“&”分隔,空格用“+”代替 参数与参数值之间用“=”分隔,如果参数未赋值,参数也同样出现在编码中,如:“姓名=”。 一些特殊符号:&,%,+转化为带%的16进制数:%NN。 例:URL编码:姓名:张三 & 性别:男 & 民族:汉 3。
      URL编码的解码 可以根据编码规则和环境变量,自己编写解码程序,也可直接使用现成的解码程序。 ⑴使用解码程序cgiparse制作CGI: cgiparse:这是处理GET方式和POST方式的很有用的程序,是CERN格式服务器程序的一部分,如果服务器为其它格式,请选用其它解码程序。
       使用CGIPARSE程序时,需根据不同的表单式输入采取相应的参数在CGI程序的开头调用CGIPARSE程序。 若使用GET命令发送表单输入,则cgiparse程序使用form选项将参数名/参数值对进行解码并存入与变量同名的Shell环境变量中,只是在名字前面加上form_前缀,即若变量原来为mybook,cgiparse产生的环境变量为FORM_mybook。
       在Bourne shell中程序调用cgiparse处理GET输入格式为eval/home/www/cgi-bin/cgiparse-form,若使用POST命令地送表单输入,可以有几种途径处理输入。其中最简单的方法是,使用_init选项,从标准输入读入输入量,并把它存入环境变量QUERY_STRING中,然后选择_form选项调用cgiparse对参数名/参数值对进行解码,并存入环境变量中。
       因此在Shell程序中调用cgiparse处理POST输入需两行命令: eval/home/www/cgi-bin/cgiparse-init eval/home/www/cgi-bin/cgiparse-form 例:#!/bin/sh eval/home/www/cgi-bin/cgiparse-init --- 第一部分: |--码,采用eval/home/www/cgi-bin/cgiparse-form --- cgiparse的POST方式 echo"Conetnt-type:text/html" --- 程序第二部分: |-- 数据头, echo --- 数据类型为文本格式html文档,注意应有一空行 echo"" -------- echo"Sleepometer Results | " | echo"Results: | if [!-z "$FORM_the Name"]; 程序主体部分: then echo"$FORM_the Name is" 处理表单输入 else echo"A Person with no name is" 注意输入数据 fi 的格式 if["$FORM_sheepy"="yes"]; | then echo"sleepy" | else echo"Not sleepy" | fi echo" -------- ⑵使用uncgi解码程序设计CGI程序 uncgi:用C语言写成,处理方式与cgiparse类似,但比cgiparse易得到并能更好地处理POST方式的输入,可从: / ml/得到有关信息。
      uncgi最好安装在目录cgi-bin中,编译前应修改Makefile文件,使其中的目录路径和你使用的系统一致。uncgi程序从用GET或POST方式输入数据中的表单中读入输入并解码,然后产生一组变量,这些变量都加上了www_前缀,如:原来的特征变量为 the work和playing,现在则对应为 www_the work和www_playing,对于多个参数名/参数值对使用相同名字时,只产生一个环境变量,每个变量值用#符号分开,如:参数名/参数值对为playing=baskeball, playing=baseball,则环境变量FORM_PLAYING的值为baskeball#baseball。
      使用uncgi程序时,需对FORM标注中的ACTION特征量作一点修改,不能在ACT\ON中直接调用,必须附上程序名,如:需改为 例: #!/bin/sh cgi程序的数据头部分: echo"Content=type:text/html" --- 使用uncgi|-- 解码程序时,echo --- 不需要解码部分,调用cgi时,自动调用uncgi进行解码。
       echo"" --------- echo"Sleeppometer Results | " | echo"" | echo"Results:" | if [!-z"$www_the Name"]; cgi程序主体部分: then echo"$www_the Name is" 其中对两个表单变量else echo"A person with no the Name和sleepy name is" 进行了处理 fi | if ["$www_sleepu"="yes"]; | then echo"sleepy。
      " | else echo"Not sleepy。" | fi | echo"" --------- ⑶使用 解码设计CGI程序 用perl语言编写,它从GET或POST读入表格是输入并存放在数组中。可从 软件包,是由Steve Brener用perl编写的,它可以从用GET或POST方式输入的表单中读入表单式输入,并存放在一个perl表或相应的数组中,用户可以从地址 用户若要使用cgi-lib,则可以从上述URL中取出源程序,并把它放在用户的perl目录中,且在用户程序中用命令veguire' '把库目录中的程序包含进程序中。
       包含好几个管理表单的程序,Read Parse是 软件包中最重要的一个表单管理软件。它能从用GET或POST输入的表单中读入输入值,并把输入值以参数名/参数值对的形式放入相应的perl数组中。 Read Parse命令的调用格式为:& Read Parse(*数组名) 对于多个参数名/参数值使用相同的名字时, 会将数组中的值用\0空字符)分开。
       例:#!/user/local/bin/perl cgi程序的第一部分: require‘ ’; --- 调用 软件包|---中的Read Parse &lead Parse(*in); --- 程序进行解码,结果放在数组in中 cgi程序的数据头部分: print"Content_type:text/html\n\n"; ---说明数据是文本格式的html文档’,“\n\n”表示打印一个空行 print“”; -------- print“Sleeppometer Results | ” ; | print“”; | print“Results:”; cgi程序 if [$in{‘the Name’}] 的主体部分: [ print“$in{the Name}is”;] 注意对表单输 else{print“A Person with no 入变量的处理, name is”;} 变量存放在数 if [$in{‘sleepy’}eq yes] 组in中 {print“sleepy。
      ”} | else{print“not sleepy。”;} | print“”; -------- 4。 带参数的CGI程序 使CGI程序通用化是非常重要的,从前面检查登录CGI的程序可知,若要检查不同人的登录情况,则需编写同样的CGI程序,但对于同样的情况,只需编写一个带参娄的CGI程序,如:只需将示例程序中的Ison:‘who I grep约翰’语句改为ison:‘who I grep“$第几个变量”’即可。
      把参数赋给CGI程序,用如下方法连接: ”clink hear。 连接中问号后的 g3为将传给cgi-bin/myscript的参数,它们用“+”分开。 下面举一个检查珍妮是否登录的例子: #!/bin/sh echo“Covtent_type:text/html” echo echo“” echo“你登录了吗?” echo“” ison=“who I grep‘$2’” if[-z“$ ison”]; the echo“珍妮已登录。
      ” else echo“珍妮未登录。” fi echo“” 用户只需通过珍妮登录了吗?即可在浏览器中显示珍妮是否登录的界面。 5。 NPH(无处理头)程序 NPH(non-processed headers)程序即非解释文件头程序,是为了加快服务器往浏览器传文件的速度,编写这种程序须按照以下格式: ⑴程序中需有一个nph前缀,如nph_pinglanra。
       ⑵程序除了原有的数据类型头、地址头及状态头外,还需加入HTTPD头。HTTPD头分为两部分: ① HTTP/1。0加上状态码,如:HTTP/1。0 2000k状态码200,表示“一切正常,数据已送走。” ② 服务器头,它能显示出运行的服务器的版本号,如: Server: NCSA/1。
      3 Server: CERN/3。0 PRE6 。

    三***

    2005-11-10 13:28:36

类似问题

换一换
  • 图像处理软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):