http://topic.csdn.net/t/20030213/10/1423382.html
标记中ACTION属性所指 明的CGI程序。如果METHOD属性值是GET,CGI程序就从环境变量QUERY_STRING中获取Form数 据;若METHOD属性值是POST,CGI程序就从标准输入(stdin)中获取Form数据。 CGI程序获取Form数据并经过处理后,还要向Web服务器返回一定的信息(如数据的处理结果等 )。为让Web服务器能正确理解所返回的是何种信息,CGI规定在输出的信息体前加上一个头部 信息,该头部信息由若干行ASCII文本构成,并用一个空行将头部信息与信息体隔开。例如要返 回HTML文档则头部信息为"Content-type: text/html"。 下面给出一个用C语言编写的CGI程序的基本框架:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char InputBuffer[4096];
- int main(int argc, char *argv[]) {
- int ContentLength; /*数据长度*/
- int x;
- int i;
- char *p;
- char *pRequestMethod; /* METHOD属性值 */
- setvbuf(stdin,NULL,_IONBF,0); /*关闭stdin的缓冲*/
- printf("Content-type: text/html/n"); /*从stdout中输出,告诉Web服务器返回的信息类型*/
- printf("/n"); /*插入一个空行,结束头部信息*/
- /* 从环境变量REQUEST_METHOD中得到METHOD属性值 */
- pRequestMethod = getenv("REQUEST_METHOD");
- if (pRequestMethod==NULL) {
- return 0;
- }
- if (_stricmp(pRequestMethod,"POST")==0) {
- p = getenv("CONTENT_LENGTH"); /*从环境变量CONTENT_LENGTH中得到数据长度*/
- if (p!=NULL) {
- ContentLength = atoi(p);
- } else {
- ContentLength = 0;
- }
- if (ContentLength>sizeof(InputBuffer)-1) {
- ContentLength = sizeof(InputBuffer)-1;
- }
- i = 0;
- while (i<ContentLength) { /*从stdin中得到Form数据*/
- x = fgetc(stdin);
- if (x==EOF) break;
- InputBuffer[i++] = x;
- }
- InputBuffer[i] = '/0';
- ContentLength = i;
- DecodeAndProcessData(); /*具体译码和处理数据,该函数代码略*/
- } else
- if (_stricmp(pRequestMethod,"GET")==0) {
- p = getenv("QUERY_STRING"); /*从环境变量QUERY_STRING中得到Form数据*/
- if (p!=NULL) {
- strncpy(InputBuffer,p,sizeof(InputBuffer));
- DecodeAndProcessData(); /*具体译码和处理数据,该函数代码略*/
- }
- }
- printf("<HEAD><TITLE>Submitted OK</TITLE></HEAD>/n"); /*从stdout中输出返回信息*/
- printf("<BODY>The information you supplied has been accepted.</BODY>/n");
- return 0;
- }