CGIC相关知识
从www.boutell.com/cgic/#obtain网站中或许CGIC源程序。解压后,其中文件如下:
Cgic.h:头文件;
Cgic.c:CGIC的源代码文件;
Cgictest.c:CGIC库的作者提供的一个CGI程序例子;
Capture.c:用于调试CGI程序的工具;
Makefile:安装CGIC的脚本文件;
整个CIGC实际上是一个CGIC.C一个文件,非常精炼。只要在编写CGI程序时,将CGIC.C和CGIC.H两个文件放到当前文件夹下,进行编译就可以了。
运用CGIC来编写CGI程序,大大简化了直接用C来编写CGI程序的过程。它解决了CGI程序和HTML互交的问题。
CGI和HTML间的互交的实现
拥有CGIC之后,CGI程序的编写不再是由Main()开始,而是由cgiMain()开始。
在打印时候,基本使用fprintf(cgiOut,””,)其中的cgiOut实际上就是stdin。
在打印HTML时候需要明确HTML头部声明类型,一般情况下text/html为类型,则在打印HTML文本前,调用cgiHeaderContentType(“test/html”);这个语句来告诉浏览器,这次传来的数据是什么类型,是一个HTML文档,还是一个BIN文件,如果是HTML文档,就通过浏览器窗口显示,如果是一个BIN文件,则打开下载窗口,让用户选择是否保存文件以及保存文件的路径。
获得Get请求字符串
Get请求就是我们在浏览器地址栏中输入URL时发送的请求方式,或者我们在HTML中电议一个表单(form)时,把action属性设为“Get”时的工作方式;
Get请求字符串就是跟在URL后面以“?”开始的字符串,但不包括问号。比如这样一个请求http://127.0.0.1/cgi-bin/out.cgi?ThisIsTheGetString。那么ThisIsTheGetString就是Get请求的字符串。在CGIC中,已经把这个字符串取到了,我们可以直接在程序中获得,要做的仅仅是在编写程序的时候加入声明
Extern char *cgiQueryString
利用这个就可以解决互交中的一个问题,就是链接中的参数数据,我们可以把问号之后的的字符串看成是一个参数,可以用此参数来加以区分。
接下来要解决表单(form)提交数据的问题:cgic中提供了一个cgiFormString()这个函数,可以通过此函数,将form中的字符串数据取出来,函数原型是
cgiFormResultType cgiFormString( char *name, char *result, int max)
name为程序中需要定义取值的字符,result为html中所要被取值的文本标签,max为取到多少长度的字符,一般情况下为name的长度。用这个方法,解决了表单提交HTML中的部分标签中的数据的读取。
最后要解决如何使得CGI程序知道了表单提交的数据是否正确提交。在CGIC中有cgiFormResultType cgiFormSubmitClicked( char *name)来解决此问题。当其值为cgiFormSuccess的时候标识表单提交成功,其中的name为HTML中表单中的submit标签的name名。用此方法也可以来区分哪个表单提交的问题,解决多个表单和一个CGI之间的关系。
以上方法已经基本上可以解决简单的CGI程序代码的编写,尤其是像嵌入式的CGI的开发,其主要基本功能都可以通过以上简单方法实现。
CGIC还提供了很多普通网站中较为深层次的函数来解决HTML和CGI之间的互交关系。例如普通网站中的cookie,Session等等在CGIC中都有相应的函数来获取其中值来进行相应的操作。这些有待于以后开发研究。