嵌入式web开发2-c语言cgi程序设计_第1页
嵌入式web开发2-c语言cgi程序设计_第2页
嵌入式web开发2-c语言cgi程序设计_第3页
嵌入式web开发2-c语言cgi程序设计_第4页
嵌入式web开发2-c语言cgi程序设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言 CGI程序设计,一、CGI概述 1.标准输入 2.环境变量 3.标准输出 二、环境变量 三、产生HTML输出 四、结束语,嵌入式 Web开发,主要内容,一、CGI概述 1.标准输入 2.环境变量 3.标准输出 二、环境变量 三、产生HTML输出 四、结束语,3,一、CGI概述,CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。 CGI程序一般完成Web网页中表单(Form)数据的处

2、理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。CGI接口标准包括标准输入、环境变量、标准输出三部分。,4,1.标准输入,CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。 以POST方法,分析CGI程序设计的方法、

3、过程和技巧。,5,2.环境变量,操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI程序传递一些重要的参数。 CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。,6,3.标准输出,CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。简单的CGI程序将HTML中Form的信息直接输出到Web浏览器。 #incl

4、ude #includemain()int,i,n; printf (“Contenttype:text/plainnn); n=0; if(getenv(“CONTENT-LENGTH) n=atoi(getenv(“CONTENT-LENGTH”); for (i=0;in;i+) putchar(getchar(); fflush(stdout);,7,CGI程序分析,prinft (Contenttype:text/plainnn ); 此行通过标准输出将字符串Contenttype:text/plain 传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随后的输出是以纯A

5、SCII文本的形式。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。 if (getenv(“CONTENT-LENGTH) n=atoi (getenv(CONTENT-LENGTH); 此行首先检查环境变量CONTENT-LENGTH是否存在。Web服务器在调用使用POST方法的CGI程序时设置此环境变量,它的文本值表示Web服务器传送给CGI程序的输入中的字符数目,因此我们使用函数atoi() 将此环境变量的值转换成整数,并赋给变量n.请注意Web服务器并不以文件结束符来终止它的输出,所以如果不检查环境变量CONTENT-LENGTH,C

6、GI程序就无法知道什么时候输入结束了 for (i=0;in;i+) putchar(getchar(); 此行从0循环到(CONTENT-LENGTH-1)次将标准输入中读到的每一个字符直接拷贝到标准输出,也就是将所有的输入以ASCII的形式回送给Web服务器。,8,CGI程序工作过程,CGI程序的一般工作过程总结: 1.通过检查环境变量CONTENT-LENGTH,确定有多少输入; 2.循环使用getchar()或者其他文件读函数得到所有的输入; 3.以相应的方法处理输入; 4.通过Contenttype:头信息,将输出信息的格式告诉Web服务器; 5.通过使用printf()或者putc

7、har()或者其他的文件写函数,将输出传送给Web服务器。 CGI程序的主要任务:从Web服务器得到输入信息,进行处理,然后将输出结果再送回给Web服务器。,9,二、环境变量,环境变量是文本串(名字/值对),可以被OS Shell或其他程序设置 ,也可以被其他程序访问。它们是Web服务器传递数据给CGI程序的简单手段,之所以称为环境变量是因为它们是全局变量,任何程序都可以存取它们。 CGI程序设计中常常要用到的一些环境变量。 HTTP-REFERER:调用该CGI程序的网页的URL. REMOTE-HOST:调用该CGI程序的Web浏览器的机器名和域名。 REQUEST-METHOD:指的是当

8、Web服务器传递数据给CGI程序时所采用的方法,分为GET和POST两种方法。 1)GET方法仅通过环境变量(如QUERY-STRING)传递数据给CGI程序, 2)POST方法通过环境变量和标准输入传递数据给CGI程序,因此POST方法可较方便地传递较多的数据给CGI程序。,10,SCRIPT-NAME:该CGI程序的名称。QUERY-STRING:当使用POST方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序。CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为”applica tion/x-www-form-url encodede,它是从HT

9、ML Form中以POST方法传递数据给CGI程序的数据编码类型,称为URL编码类型。CONTENT-LENGTH:传递给CGI程序的数据字符数(字节数)。 在C语言程序中,要访向环境变量,可使用getenv()库函数。例如:if (getenv(“CONTENT-LENGTH) n=atoi (getenv(CONTENT-LENGTH);,11,输入的分析和解码,1. 分析名字/值对 当用户提交一个HTML Form ,Web 浏览器首先对Form中的数据以名字/值对的形式编码,发送给Web 服务器,Web 服务器传递给CGI程序。格式如下 name1=value1main() int i

10、,n; char c; printf (Contenttype: text/plainnn ); n=0; if (getenv(CONTENT-LENGTH) n=atoi(getenv(CONTENT-LENGTH); for (i=0; in;i+) i nt is-eq=0; c=getchar(); switch (c) case ,13,break;case %: char s3; s0=getchar(); s1=getchar(); s2=0; c=htoi(s); i+=2;break; case =: c=:; is-eq=1;break;putchar(c);,14,if

11、 (is-eq) putchar();putchar (n);fflush(stdout); /* convert hex string to int */int htoi(char *s)char *digits=“0123456789ABCDEF; if (islower (s0) s0=toupper(s0); if (islower (s1) s1=toupper(s1); return 16 * (strchr(digits, s0) -strchr (digits,0)+(strchr(digits,s1)-strchr(digits,0);,15,上面的程序首先输出一个MIME头

12、信息给Web服务器,检查输入中的字符数,并循环检查每一个字符。当发现字符为 printf(n ); printf(An HTML Page From a CGIn); printf(n ); printf( This is an HTML page generated from with i n a CGI program. .n);,18,printf(n);printf( Go back to out put.html page n );printf(n );printf(n );fflush(stdout);,19,上面的CGI程序简单地用printf()函数来产生HTML源代码。 请注意在输出的字符串中如果有双引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论