1.cgi通信方式
当有数据从客户端浏览器传到Web服务器后,web服务器会根据传送的类型(基本有二类:GET/POST),将接收到的数据传入 QUERY_STRING或变量中, CGI程序可以通过标准输入,在程序中接收web服务器接收的数据。当要向浏览器发送信息时,只要向Web服务器发送特定的文件头信息,即可通过标准输出将信息发往Web服务器, Web服务器处理完由CGI程序发来的信息后就会将信息发送给浏览器。
2.接收数据
用GET方式接收到的数据保存在Web服务器的QUERY_STRING 变量里,而通过POST方式接收到的数据是保存在Web服务器变量里。两种数据接收方式的区别是:以GET方式接收的数据是有长度限制,而用POST方式接收的数据是没有长度限制的;以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送的数据必须要通过Form才发送。
3.CGI变量
char *cgiServerSoftware 服务器软件名称,或者一个空的字符串 char *cgiServerName 返回服务器名称或空 char *cgiGatewayInterface 网关接口(通常是 CGI/1.1)或空 char *cgiServerProtocol 网络协议(usually HTTP/1.0)或空 char *cgiServerPort 服务器端口(usually 80),或空 char *cgiRequestMethod 请求方式(usually GET or POST)或空 char *cgiPathInfo 指出附加虚拟路径 char *cgiPathTranslated 指出附加虚拟路径并由服务器转为本地路径 char *cgiscriptName 调用程序的名字 char *cgiQueryString 包含GET-method请求或者<ISINDEX> 标签。不需解析,除非用<ISINDEX>标签,通常由CGIC函数库自动解析。 char *cgiRemoteHost 从浏览器返回客户主机的名字 char *cgiRemoteAddr 从浏览器返回客户的IP地址 char *cgiAuthType 返回用户授权信息 char *cgiRemoteUser 鉴别用户cgiAuthType. char *cgiRemoteIdent 返回用户的名字(用户通过用户坚定协议) char *cgiContentType 返回MIME内型 char *cgiAccept 参考 cgiHeaderContentType() cgiUserAgent char *cgiUserAgent 获取的用户浏览器信息 char *cgiReferrer 指向用户访问的URL. int cgiContentLength 表单或查询数据的字节被认为是标准的. FILE *cgiOut CGI输出。cgiHeader函数,象cgiHeaderContentType,首先被用于输出mime头;用于 fprintf() 和fwrite()。cgiOut通常相当于stdout。 FILE *cgiIn CGI输入
4.CGIC库主要函数
用一般 ANSI C或C++编译器就可以编译CGIC程序 , 与C程序不同的是,用CGIC写的源码其主函数是cgiMain(), 而不是通常的main。 CGIC的函数库会自动把cgiMain连接到相应的main上。
CGIC库主要函数说明:
cgiFormResultType cgiFormString( char *name, char *result, int max) 用于从输入域中copy字符串。将域名max-1字节中的字符copy到缓冲区result。若域不存在,则copy一个空串到result缓冲区。在此函数中所有的新行由换行符代表。 cgiFormResultType cgiFormStringNoNewlines( char *name, char *result, int max) 与cgiFormString函数相似,只是所有的CR和LF都被去掉。 cgiFormResultType cgiFormStringSpaceNeeded( char *name, int *length) 返回指向name的字符串的长度,并将长度放入length中。 cgiFormResultType cgiFormStringMultiple( char *name, char ***ptrToStringArray) 若同一名字有多个输入域,或域中的字符串可以动态变化,使用本函数。它把名为name的所有输入域的值放在prtToStringArray中。 void cgiStringArrayFree(char **stringArray) 释放了分配给stringArray的内存。 cgiFormResultType cgiFormInteger( char *name, int *result, int defaultV) 从输入域中取出整数放入result中。 cgiFormResultType cgiFormIntegerBounded( char *name, int *result, int min, int max, int defaultV) 若输入域中的整数在界限内则取出并放入result中。 cgiFormResultType cgiFormDouble( char *name, double *result, double defaultV) 从输入域中取出浮点数放入result中。 cgiFormResultType cgiFormDoubleBounded( char *name, double *result, double min, double max, double defaultV) 若输入域中的浮点数在界限内则取出并放入result中。 cgiFormResultType cgiFormSelectSingle( char *name, char **choicesText, int choicesTotal, int *result, int defaultV) 取出复选框(跟在select语句之后的),把选择的名字copy到choicesText,把选择的个数copy到choicesTotal,把当前的选择copy到result。 cgiFormResultType cgiFormSelectMultiple( char *name, char **choicesText, int choicesTotal, int *result, int *invalid) 与cgiFormSelectSingle类似,只指向整型数组的result代表了选择的项。 cgiFormResultType cgiFormCheckboxSingle( char *name) 若复选框被选中,则函数返回cgiFormSuccess,否则返回cgiFormNotFound。 cgiFormResultType cgiFormCheckboxMultiple( char *name, char **valuesText, int valuesTotal, int *result, int *invalid) 与cgiFormCheckboxSingle类似,但它处理同一名字有多个复选框的情况。name指向复选框的名字;valuesText指向包含有每个复选框中参数的一个数组;valuesTotal指向复选框的总数;result是一个整型数组,每个复选框选中的用1代表,没选中的用0代表。 cgiFormResultType cgiFormRadio( char *name, char **valuesText, int valuesTotal, int *result, int defaultV) 与cgiFormCheckboxMultiple相似,只是这里是单选按钮而不是复选框。 void cgiHeaderLocation(char *redirectUrl) 重定向到redirectUrl指定的URL。 void cgiHeaderStatus(int status, char *statusMessage) 输出状态代码status和消息statusMessage。 void cgiHeaderContentType(char *mimeType) 用于告知浏览器返回的是什么类型的文档。在任何向浏览器输出之前被调用,否则将出错或浏览器不能识别。 cgiEnvironmentResultType cgiWriteEnvironment(char *filename) 本函数把当前CGI环境写入filename文件中以便以后调试时使用 cgiEnvironmentResultType cgiReadEnvironment(char *filename) 本函数从filename文件中读取CGI环境以便用来调试。
原文:https://www.cnblogs.com/zhuangquan/p/13265840.html