CGI程序数据的输出方法-KC08161306-d01.
CGI编程完全手册(个人学习笔记)

CGI一.基本原理CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。
通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。
组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。
另一部分则是运行在服务器上的Cgi程序。
它们之间的通讯方式如下图:服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP 通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。
服务器和CGI程序之间的通讯才是我们关注的。
一般情况下,服务器和CGI程序之间是通过标准输入输出来进行数据传递的,而这个过程需要环境变量的协作方可实现。
1.服务器将URL指向一个应用程序2.服务器为应用程序执行做准备3.应用程序执行,读取标准输入和有关环境变量4.应用程序进行标准输出对于Windows系统而言,还可以通过profile文件进行数据传输(如ini文件),但在这里不做研究。
环境变量在CGI中有着重要的地位!每个CGI程序只能处理一个用户请求,所以在激活一个CGI程序进程时也创建了属于该进程的环境变量。
二.环境变量对于CGI程序来说,它继承了系统的环境变量。
CGI环境变量在CGI程序启动时初始化,在结束时销毁。
当一个CGI程序不是被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制。
当这个CGI程序被HTTP服务器调用时,它的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。
并且经过了URL编码。
ACCEPT:客户机所支持的MIME类型清单,内容如:”image/gif,image/jpeg”REQUEST_METHOD:它的值一般包括两种:POST和GET,但我们写CGI程序时,最后还要考虑其他的情况。
CGIC简明教程目录(CGI篇)

CGIC简明教程目录(CGI篇)/u3/100089/showart_2071513.htmlCGIC简明教程目录本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求。
基础知识* 1: 使用CGIC的基本思路* 2: 获取Get请求字符串* 3: 反转义* 4: 获取请求中的参数值进阶训练* 用CGIC实现文件上传CGIC简明教程1:使用CGIC的基本思路C语言编程是一项复杂且容易出错的工作,所以在完成复杂任务时,一定要选择合适的库。
对于用C语言编写CGI程序则更是如此。
CGIC是非常优秀的C语言CGI库函数。
其下载地址为:/cgic/#obtain,现在的版本号是2.05。
本站从今天开始,将逐步介绍如何使用CGIC完成各种操作,也可以说是一个Tutorial。
(注:本系列涉及的编程环境都是Linux,Windows用户需要对用到的操作系统命令稍作修改)本文纲要:CGIC的安装、测试安装、使用CGIC的基本思路;1) CGIC的下载安装从上面提供的官方网址下载了CGIC库之后,解开压缩包,里面有大约10个文件,有用的是:cgic.h:头文件;cgic.c:CGIC的源代码文件;cgictest.c:CGIC库的作者提供的一个CGI程序例子;capture.c:用于调试CGI程序的工具;Makefile:安装CGIC的脚本文件;可以看到,整个库实际上就是cgic.c一个文件,可以说是非常的精炼。
我们可以把CGIC安装为操作系统的一个动态链接库,这样我们每次编译的时候,就不需要有cgic.c这个源文件了。
但是由于需要(以后将会看到),我们将修改cgic.c代码,所以我们不把它安装进系统。
每次编译的时候,只要把cgic.c和cgic.h放到当前文件夹就好了。
2) 测试安装在开始编写你自己的CGI程序之前,一定要先走通他的例子程序,免得后来程序出错的时候还不知道是配置有问题,还是你的程序代码有问题。
C语言编写CGI_程序指南

环境变量是文本串(名字/值对),可以被 OS Shell 或其他程序设置 ,也可以被其他程序 访问。它们是 Web 服务器传递数据给 CGI 程序的简单手段,之所以称为环境变量是因为它 们是全局变量,任何程序都可以存取它们。
下面是 CGI 程序设计中常常要用到的一些环境变量。 HTTP-REFERER(http-referer):调用该 CGI 程序的网页的 URL。 REMOTE-HOST(remote-host):调用该 CGI 程序的 Web 浏览器的机器名和域名。 REQUEST-METHOD(request-method):指的是当 Web 服务器传递数据给 CGI 程序时所 采用的方法,分为 GET 和 POST 两种方法。GET 方法仅通过环境变量 (如 QUERY-STRING) 传递数据给 CGI 程序,而 POST 方法通过环境变量和标准输入传递数据给 CGI 程序,因此 POST 方法可较方便地传递较多的数据给 CGI 程序。
n=atoi(getenv("CONTENT-LENGTH")); for (i=0; i<n;i++){
int is-eq=0; c=getchar(); switch (c){ case '&':c='n';break; case '+':c=' ';break; case '%':{
char s[3]; s[0]=getchar(); s[1]=getchar(); s[2]=0; c=htoi(s); i+=2; } break; case '=':c=':';is-eq=1;break; }; putchar(c); if (is-eq) putchar(' '); } putchar ('n'); fflush(stdout); }
【转载】CGI(通用网关接口,CommonGatewayInterface)

【转载】CGI(通⽤⽹关接⼝,CommonGatewayInterface)CGI早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。
随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运⾏动态脚本,为了解决Web服务器与外部应⽤程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通⽤⽹关接⼝。
简单理解,可以认为CGI是Web服务器和运⾏其上的应⽤程序进⾏“交流”的⼀种约定。
Web系统结构CGI是Web服务器和⼀个独⽴的进程之间的协议,它会把HTTP请求Request的Header头设置成进程的环境变量,HTTP请求的Body正⽂设置成进程的标准输⼊,进程的标准输出设置为HTTP响应Response,包含Header头和Body正⽂。
CGICGI 程序CGI只是⼀个接⼝规范或协议,它的实现则与具体的编程语⾔相关。
在2000年以前,CGI通⽤⽹关接⼝盛⾏,那个时候,Perl是编写CGI的主流语⾔,以⾄于⼀般的CGI程序都是Perl程序。
CGI程序通过CGI接⼝,Web服务器就能够获取客户端传递的数据,并转交给服务器端的CGI程序处理,然后返回结果给客户端。
简单来说,CGI实际上是⼀个接⼝标准。
⽽通常所说的CGI指代其实是CGI程序,也就是实现了CGI接⼝标准的程序,只要编程语⾔具有标准输⼊、标准输出和环境变量,就可以⽤来编写CGI程序。
CGI程序通过标准输⼊(STDIN)和标准输出(STDOUT)进⾏数据的输⼊输出,此外CGI程序还通过环境变量来得到输⼊,操作系统提供了许多环境变量,它们定义了程序的执⾏环境,应⽤程序可以存取它们。
Web服务器和CGI接⼝⼜另外设置了⼀些环境变量,⽤来向CGI程序传递⼀些重要的参数。
CGI的GET⽅法还通过环境变量QUERY_STRING向CGI程序传递Form表单中的数据。
CGI简说

CGI简说一、CGI基本原理1.CGI概述CGI是一种接口规范,不定义Web服务器的工作方式,也不定义程序如何产生结果,它建立互操作中双方必须遵守的规则集。
协议语言2.CGI方法CGI方法是指调用CGI程序的途径,也就是如何向服务器提出请求,在该请求中定义了程序如何接收用户的数据。
CGI方法主要有三中,其中两种较为常用。
a.GET方法●CGI程序从环境变量QUERY_STRING中获取数据。
●GET方法把用户表格中的数据加到URL的末尾,再传送到服务器。
●GET方法采用特殊的编码方法防止用户数据中的特殊字符导致CGI出错。
●由于URL的长度限制为1024,所以不能用于大量用户数据传递。
●使用GET方法时,可以在地址栏中看到URL后的用户数据。
b.POST方法●WEB服务器通过stdin(标准输入),向CGI程序传输数据。
●POST方法利用CONTENT_LENGTH值确定用户的数据长度。
●在用户数据较大时采用POST●使用POST,用户不显示在URL后。
c.HEAD方法与GET方法类似,但是从Web服务器传递给服务器的仅仅是HTTP的头信息。
3.CGI接口规范Web服务器与CGI程序之间通信的四种主要方法:环境变量命令行标准输入标准输出这四种方法主要涉及的内容是在CGI的1.1版本中给定的,在以后的版本中将会扩充,但是这些内容会向后兼容。
a.环境变量环境变量是由Web服务器执行CGI程序时设置的与系统相关的变量。
下面将列出一些重要的环境变量。
AUTH_TYPE——给出确认的类型。
CONTENT_LENGTH——以字节为单位给出用POST方法向CGI程序传送数据的长度。
当使用GET方法时,CONTENT_LENGTH变量为空。
CONTENT_TYPE——给定由POST方法调用CGI程序时传送数据的MIME类型。
当使用GET方法时,CONTENT_TYPE变量为空。
GA TEWAY_INTERFACE——给出所用的CGI规范名和版本号。
C语言CGI编程实战

C语言CGI编程实战C语言CGI编程是一种用于创建动态网络应用程序的技术,它能够实现与Web服务器进行交互的功能,从而为用户提供更为丰富和个性化的体验。
本文将以实例为基础,介绍C语言CGI编程的相关知识和实践技巧。
一、什么是CGI编程CGI是Common Gateway Interface(公共网关接口)的缩写,它是一种通过Web服务器调用外部程序的机制。
基于CGI编程,我们可以在Web服务器上运行C语言程序,实现与用户的互动和数据交换。
二、CGI编程环境配置在进行CGI编程前,我们需要确保系统已经安装并配置了CGI相关的环境。
主要的配置步骤包括:1. 安装Web服务器:比如Apache、Nginx等主流的Web服务器软件。
2. 配置CGI目录:新建或选择一个目录作为CGI的执行目录,并在Web服务器的配置文件中进行相应设置。
3. 设置CGI脚本权限:为CGI脚本文件赋予可执行权限,以便Web服务器能够正确调用。
三、编写第一个CGI程序下面以一个简单的登录页面为例,演示如何使用C语言编写一个基本的CGI程序。
首先,我们需要在HTML中创建一个表单,用于输入用户名和密码:```html<form action="/cgi-bin/login.cgi" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username"><br><label for="password">密码:</label><input type="password" id="password" name="password"><br><input type="submit" value="登录"></form>```然后,我们编写C语言程序login.cgi,用于接收表单数据并进行处理:```c#include <stdio.h>#include <stdlib.h>int main() {printf("Content-type: text/html\n\n");char *data;char *validUsername = "admin";char *validPassword = "password";// 从标准输入中获取表单数据fgets(data, 100, stdin);// 解析表单数据char *username = strchr(data, '=') + 1;char *password = strchr(data, '=') + 1;// 验证用户名和密码if (strcmp(username, validUsername) == 0 && strcmp(password, validPassword) == 0) {printf("<h1>登录成功!</h1>");} else {printf("<h1>登录失败!</h1>");}return 0;}```在程序中,我们首先输出响应头Content-type,告诉Web服务器以文本格式解析数据。
Windows操作平台下CGI的实现
⼀、CGI概述1.CGI概念 CGI即通⽤⽹关接⼝(Common Gateway Interface),它是⼀个WWW服务器主机对外服务的标准接⼝。
⼀般来说,⼀个CGI接⼝的功能就是在超⽂本⽂件和服务器主机应⽤程序间传递信息。
2.CGI程序语⾔ 事实上,任何⼀种程序语⾔,只要能在服务器主机上利⽤CGI接⼝来编写应⽤程序,都可以叫作CGI程序语⾔。
⽬前最为流⾏的CGI程序语⾔有四种:C、Shell、Perl和Visual Basic,其它⼀些语⾔也有许多⼈在⽤,如TCL、Frotran及AppleScript等。
下⽂我们将介绍⽤C语⾔编写CGI的⽅法。
3.CGI程序的执⾏ CGI程序⼀般是个可执⾏程序。
编译好的CGI程序⼀般要集中放在⼀个⽬录下。
具体存放的位置随操作系统的不同⽽不同,例如UNIX系统下是放在cgi-bin⼦⽬录下,⽽在Windows操作下(注意,这⾥不包括NT4.0)以Webstar或Website作WWW服务器,CGI程序都放在cgi-win下。
CGI程序的执⾏⼀般有两种调⽤⽅式:⼀种是通过URL直接调⽤,如:/cgi-win/cgi.exe,在Netscape的URL栏⾥直接写⼊上述描述就可以调⽤该程序:另⼀种⽅式,也是主要的⽅式是通过交互式主页⾥的FORM栏调⽤,通常都是⽤户在填完⼀张表后按确认按钮启动CGI程序。
4.CGI⼯作的主要流程 CGI⼯作的主要流程是:1.通过HTML获取⽤户输⼊的信息;2.将⽤户输⼊的信息传给服务器主机应⽤程序(如数据库查询);3.将服务器处理结果通过HTML⽂件返回给⽤户。
⼆、Windows平台下CGI的⼯作原理 CGI主要的功能不外乎在服务器应⽤程序和客户之间传递信息。
我们知道,通常CGI应⽤在服务器和客户端传递信息是通过输⼊输出流来实现的,如UNIX平台下的CGI,通过读取输⼊流Scanf来获取⽤户输⼊,读取输出流printf向⽤户输出结果。
CGI技术
这样用户数量的增加必然大大降低Web服务器的运行效 率。目前,CGI技术最为成熟,历史最为悠久,也得到 了广泛应用(尤其在Unix平台上)。但CGI程序的开发 难度较大。
HTTP请求 Web浏览器 CGI标准的客户机数据 数据库访问请求 CGI程序 数据库 数据库访问结果
W的返回结果
CGI一般都是一个独立的可执行程序,本质上CGI是Web服务器端的 一个进程,每当客户端输入一个请求时,就必须激活一个CGI程序。 可以作为Web服务器与其他应用程序、信息资源和数据库之间的中介 器。通过CGI接口标准,Web服务器可以调用一个CGI程序,同时将用户 指定的数据传给予它,随后,该CGI程序根据传入的数据做相应的处理 ,这种处理当然也可以是数据库访问处理,最后Web服务器再将程序的 处理结果返回到Web浏览器。CGI程序可以用许多程序设计语言来编写 ,常用的编程语言有C/C++语言、Perl、VB等。
CGI(Common Cateway Interface)技术 ( )
CGI是通用网关界面,是一种Web服务器上运行基于Web浏览器输入 程序的方法。是最早的访问数据库的解决方案。CGI程序可以建立网页 与数据库之间的连接,将用户的查询要求转换成数据库的查询命令,然 后将查询结果通过网页返回给用户。一个CGI工作的基本原理如图1-5所 示。
CGI的工作原理
工作原理
CGI(Common Gateway Interface)是外部应用程序与Web服务器交互的一个标准接口。CGI应用程序可以完成客户端与服务器的交互操作,它打破了服务器软件的局限性, 允许用户根据需要采用各种语言去实现无法用HTTP、HTML实现的功能,给WWW提供了更为广阔的应用空间。例如,一个能够访问外部数据库的CGI程序 可以使客户端用户通过Web服务器进行数据库的查询。同时,CGI也为如何在不同的平台之间进行沟通提供了范例。
CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页中用户输入的信息提取出来;3.将用户输入的信息传给服 务器主机应用程序(如数据库查询);4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。
CGI程序的工作原理是:客户端的Web浏览器浏览到某个主页后,利用一定的方式提交数据,并通过HTTP协议向Web服务器发出请求,服务器端的 HTTP Daemon(守护进程)将描述的主页信息通过标准输入stdin和环境变量(environment variable)传递给主页指定的CGI程序,并启动此应用程序进行处理(包括对数据库的处理),处理结果通过标准输出stdout返回给HTTP Daemon守护进程,再由HTTP Daemon进程通过HTTP协议返回给客户端的浏览器,由浏览器负责解释执行,将最终的结果显示给用户。
如何编写CGI程序
1.1 如何编写CGI程序CGI的工作原理介绍:CGI(Common Gateway Interface)是一个WEB服务器提供信息服务的标准接口,通过这样一个接口,WEB服务器能够执行程序,并将程序输出的信息返回给浏览器。
因为在WEB网上的数据都是静态的,通过CGI程序能够动态的处理浏览者的请求,如保存用户输入的信息,根据用户信息返回相关的资料等等。
当客户端发送一个CGI请求给WEB服务器后,WEB 服务器将根据CGI程序的类型决定数据向CGI程序的传送方式,一般来讲是通过标准输入/输出流和环境变量来与CGI程序间传递数据。
CGI输入输出原理CGI的输入/输出方法:CGI程序通过标准输入(STDIN)和标准输出(STDOUT)来进行输入输出,STDIN和STDOUT是两个预先定义好的文件指针。
你可以利用文件读写函数来对其进行操纵。
此外CGI程序还通过环境变量来得到输入,只不过环境变量中提供的是一些常用的信息,并且通常不包括用户在WEB页面中输入的信息(除使用下面讲的GET方法时,通过检查环境变量QUERY_STRING来得到输入数据),而STDIN通常用来传递用户输入的信息。
在普通CGI程序开发中我们需要关心的环境变量有以下这些:一部分是与WEB服务器有关的环境变量:∙SERVER_NAME WEB服务器名称∙SERVER_PORT WEB服务器监听地址∙SERVER_PROTOCOL 用于发送请求的协议名称和版本∙SERVER_SOFTWARE WEB服务器名称和版本一部分是与运行CGI有关的:∙REQUEST_METHOD 数据传送(信息传递)方法∙CONTENT_LENGTH 数据长度∙QUERY_STRING 所传送的数据∙REMOTE_ADDR 客户方IP地址∙REMOTE_HOST 客户方主机名程一部分是与客户方有关的:∙HTTP_USER_AGENT 客户浏览器名称∙HTTP_ACCEPT 客户机所能支持的MIME类型列表∙HTTP_REFERER 客户机中前一文档的URL在输入时所使用的POST/GET方法:在WEB页面向CGI发送数据时通常采用两种方法:GET/POST,GET方法将数据附加在URL后发送,如:/cgi/a_cgi_test.exe?your_data,CGI程序通过检查环境变量QUERY_STRING来得到输入数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式网关之远程控制设计
CGI程序数据的输出方法
CGI数据输出
CGI程序数据ห้องสมุดไป่ตู้的输出方法
• CGI程序如何将信息处理结果返回给客户端?可以通过CGI 格式化输出。 • 在CGI程序中的标准输出stdout是经过重定义了的,它并没 有在服务器上产生任何的输出内容,而是被重定向到客户 浏览器,这与它是由C语言,还是Perl或Python语言实现无 关。 • 所以,我们可以用打印方法来实现客户端新的HTML页面的 生成,如C语言使用printf向该进程的标准输出发送数据。
设定输出为另外一 (地址) 个文档(URL)
(状态) 指定HTTP状态码
Status
Content_type 类型
CGI程序数据 的输出方法
• 向标准输出发送网页内容时要遵守MIME格式规则: • 任意输出前面必须有一个用于定义MIME类型的输出内容(Contenttype)行,而且随后还必须跟一个空行。如果遗漏了这一条,服务 将会返回一个错误信息。 • 例如Perl和Python语言: print “Content-type:text/html\n\n”; //输出HTML格式的数据 print “<body>welcome<br>” print “</body>” • C语言: printf( “Content-type:text/html\n\n”); printf(“Welcome\n”);
CGI程序数据 的输出方法
MIME类型以类型/子类型(type/subtype)的形式表示。 其中type表示一下几种典型文件格式的一种: Text、Audio、Video、Image、Application、Mutipart、 Message 如: Application/msword 微软Word文件
CGI程序数据 的输出方法
• CGI程序产生的输出由两部分组成:MIME头信息和实际的信 息,两部分之间以一个空行分开。 • 程序一旦发送这个MIME头信息给Web服务器后,Web浏览 器将认为随后的文本输出为HTML源代码。
• 在HTML源代码中可以使用任何HTML结构,如超链、图像、 Form表单,以及对其他CGI程序的调用等。
HTTP状态码
CGI程序数据 的输出方法
• 表示了请求的结果状态,是CGI程序通过服务器用来通知用 户其请求是否成功执行的信息码。 • HTTP状态码类型有: (1)消息 (2)成功 (3)重定向 (4)客户机错误 (5)服务器错误
谢谢关注!
Application/zip Application/pdf Zip压缩文件 Pdf文件
Location程序定位
CGI程序数据 的输出方法
• 使用Location标题,一个CGI可以使当前用户转而访问同一 服务器上的另外一个程序,甚至可以访问另外一个URL,但 服务器对他们的处理方式不一样。 • 使用Location的格式为:Location:Filename/URL,例如: (1) print “Location:/test.html\n\n”; 这与直接链接到test.html的效果一样。 (2)print “Location:/\n\n” 由于该URL并不指向当前服务器,用户浏览器并不会直接链 接到指定的URL,而是给用户输出提示信息。
CGI标题
• CGI的格式输出内容必须组 织成标题/内容的形式。CGI 标准规定了CGI程序可以使 用的三个HTTP标题。标题 必须占据第一行输出!而且 必须随后带有一个空行。
标题 Content_type (内容类型) Location
CGI程序数据 的输出方法
描述 设定输出数据所用 的MIME类型