- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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来得到输入数据。而POST方法则会将数据送入CGI程序的STDIN输入流。在表单(FORM)中的各个变量都会成为name=value的形式向WEB服务器发送,多个数据间用分隔,如:name=valuename2=value2。其中名字(name,name2)是Form中定义的INPUT、SELECT或TEXTAREA等标置(Tag)名字,值是用户输入或选择的标置值。
有了上面的知识我们就可以马上写一个简单的CGI程序了。代码如下:
void main(void)
{// 本程序将用户输入的数据打印出来
fprintf(stdout,content-type: text/plain\n\n);
// 输出一个CGI标题,这行代码的意义后面会讲解
char *pszMethod;
pszMethod = getenv(REQUEST_METHOD);
if(strncmp(pszMethod,GET) == 0)
{// GET method
//读取环境变量来获取数据
fprintf(stdout,input data is :\n%s,getenv(QUERY_STRING));
}
else
{// POST method
//读取STDIN来获取数据
int iLength=atoi(getenv(CONTENT_LENGTH));
fprintf(stdout,input data is :\n);
for(int i=0;iiLength;i++)
{
char cGet=fgetchar(stdin);
fputchar(stdout,cGet);
}
}
}
如上面说讲,在CGI程序输出时必须先输出一个CGI标题,标题共有以下三类:
Location: 标题,指明输出另一个文档的URL,例如 fprintf(stdout,Location: /\n\n);
Content-Type: 标题,指明发送的数据的MIME类型,例如 fprintf(stdout,Content-Type: text/html\n\n);
Status: 标题,指明HTTP状态码,例如 fprintf(stdout,Status: 200\n\n);
注意每种标题后都必须跟一个换行
您可能关注的文档
最近下载
- 德邦快递_销售体系优化项目_销售体系现状分析报告v1.0_20150413汇报版.pptx VIP
- 最新子宫颈高级别上皮内病变管理的中国专家共识2022(完整版).pdf
- 雨棚清单报价表格.docx
- 光电图像处理-PPT课件(全).pptx
- 《初中英语阅读课“教-学-评”一体化的实践研究》课题研究方案.doc
- YC_T 10.4-2018烟草机械 通用技术条件 第4部分:灰铸铁件.pdf
- 一种应用于港口无人集卡的路径调度仿真测试方法、系统及介质.pdf VIP
- 人教版八年级地理上册《4-3 工业》教学课件PPT初二优秀公开课.pptx
- 5.2吸收借鉴优秀道德成果.pptx
- 消费者债务清理条例 - 司法院.doc VIP
文档评论(0)