在CGI程序中POST和GET消息的处理
2012-04-08 13:14
423 查看
数据传送格式 当用户填完表格并按了SUBMIT按钮后,Web浏览器并非将用户所填的数据直接送给Web服务器, 而先要经过一定的编码处理。 Web浏览器总是将数据按照“变量名=变量值”这样的数据对格式进行编码,并且每对数据之间 用一个&符号相连接。其中“变量名”就是Form元素中的NAME属性值;“变量值”则是用户在 输入框中所输入的数据,或者是用户所选择的数据(即RADIO,CHECKBOX,OPTION中
的VALUE值)。 并且Web浏览器将用户数据中的所有空格都替换成"+"号。另外一些特殊字符的表示使用转义 符"%"后面加上该特殊字符的十六进制ASCII码。特殊字符主要包括"="、"+"、"&"、"%"以及多 行文本中的回车,换行符,所有不能直接显示的高位ASCII符等。
一个Form的简单例子 例如在上例中用户填入了下述信息(其中/n表示回车换行): name "J&K" sex "male" flavor "apple" flavor "orange" weight "middle" opinion "I think it is necessary that/nman eat fruit everyday." 则Web浏览器发送数据时的字符序列为: name=J%26K&sex=male&flavor=apple&flavor=orange&weight=middle&
opinion=I+think+it+is+necessary+that%0D%0Aman+eat+fruit+everyday. 用CGI程序处理得到的数据 当Web浏览器将Form数据经过编码后,就传送给了Web服务器,而Web服务器并非自己处理这些 数据,而是先依靠CGI程序来帮忙处理这些数据,然后Web服务器再把CGI程序产生的处理结果 返回给Web浏览器。
CGI(Common Gateway Interface,通用网关接口)是信息服务器(如Web服 务器)与外部应用程序之间的一个接口标准。通常被Web服务器所取到的HTML文件总是事先编 辑好的,固定不变的信息,但若通过实时运行着的CGI程序Web服务器就有可能向Web浏览器 输出动态的信息。 CGI标准用最简单的话来说就是:CGI程序是通过标准输入(stdin)或环境变量来得到服务器的输 入信息,并通过标准输出(stdout)向服务器输出信息。
当Web服务器收到了由Web浏览器传来的Form数据时,就启动标记中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程序的基本框架:
的VALUE值)。 并且Web浏览器将用户数据中的所有空格都替换成"+"号。另外一些特殊字符的表示使用转义 符"%"后面加上该特殊字符的十六进制ASCII码。特殊字符主要包括"="、"+"、"&"、"%"以及多 行文本中的回车,换行符,所有不能直接显示的高位ASCII符等。
一个Form的简单例子 例如在上例中用户填入了下述信息(其中/n表示回车换行): name "J&K" sex "male" flavor "apple" flavor "orange" weight "middle" opinion "I think it is necessary that/nman eat fruit everyday." 则Web浏览器发送数据时的字符序列为: name=J%26K&sex=male&flavor=apple&flavor=orange&weight=middle&
opinion=I+think+it+is+necessary+that%0D%0Aman+eat+fruit+everyday. 用CGI程序处理得到的数据 当Web浏览器将Form数据经过编码后,就传送给了Web服务器,而Web服务器并非自己处理这些 数据,而是先依靠CGI程序来帮忙处理这些数据,然后Web服务器再把CGI程序产生的处理结果 返回给Web浏览器。
CGI(Common Gateway Interface,通用网关接口)是信息服务器(如Web服 务器)与外部应用程序之间的一个接口标准。通常被Web服务器所取到的HTML文件总是事先编 辑好的,固定不变的信息,但若通过实时运行着的CGI程序Web服务器就有可能向Web浏览器 输出动态的信息。 CGI标准用最简单的话来说就是:CGI程序是通过标准输入(stdin)或环境变量来得到服务器的输 入信息,并通过标准输出(stdout)向服务器输出信息。
当Web服务器收到了由Web浏览器传来的Form数据时,就启动标记中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 DecodeAndProcessData(char *input); /*具体译码和处理数据,该函数代码略*/ 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\n"); /*从stdout中输出,告诉Web服务器返回的信息类型*/ printf("\n"); /*插入一个空行,结束头部信息*/ printf("<p>hello test</p>"); /* 从环境变量REQUEST_METHOD中得到METHOD属性值 */ pRequestMethod = getenv("REQUEST_METHOD"); if(pRequestMethod==NULL) { printf("<p>request = null</p>"); return 0; } if (strcasecmp(pRequestMethod,"POST")==0) { printf("<p>OK the method is POST!\n</p>"); 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(InputBuffer); //具体译码和处理数据,该函数代码略 } else if (strcasecmp(pRequestMethod,"GET")==0) { printf("<p>OK the method is GET!\n</p>"); p = getenv("QUERY_STRING"); //从环境变量QUERY_STRING中得到Form数据 if (p!=NULL) { strncpy(InputBuffer,p,sizeof(InputBuffer)); DecodeAndProcessData(InputBuffer); //具体译码和处理数据,该函数代码略 } } printf("<HEAD><TITLE>Submitted OK</TITLE></HEAD>\n");//从stdout中输出返回信息 printf("<BODY>The information you supplied has been accepted.</BODY>\n"); return 0; } int DecodeAndProcessData(char *input) //具体译码和处理数据 { // 补充具体操作 return 0; }
相关文章推荐
- CGI程序中POST和GET消息的处理
- 在CGI程序中POST和GET消息的处理
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- C语言CGI程序--POST表单/GET表单处理
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- linux下shell处理cgi的方法--post get
- js 调用一般处理程序 调用 接口post get
- cgi程序读取post发送的特殊字符,尤其适合于微信公众平台开发中发送被动消息
- 一般处理程序获取客户端post和get的请求信息
- Android客户端发送Post/Get请求到Asp.Net服务端一般处理程序Asp.Net进行参数解析
- MFC程序消息处理的顺序
- 【转】Output Post Processor(OPP)/输出提交处理程序
- 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言
- 【Swift】 GET&POST请求 网络缓存的简单处理
- 表单向后台提交数据,get和post的两种方式的根本区别以及如何处理乱码?
- asp.net Ajax Post 请求一般处理程序
- CGI实例--表单GET与POST示例
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- jquery ajax post, get, javascript ajax post, get 处理