CGI编程中POSTGET详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGI编程中POSTGET详解相关的知识,希望对你有一定的参考价值。

什么是 HTTP?

超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。

HTTP 的工作方式是客户机与服务器之间的请求-应答协议。

web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。

举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

两种 HTTP 请求方法:GET 和 POST

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

GET - 从指定的资源请求数据。

POST - 向指定的资源提交要被处理的数据

GET 方法

请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

/test/demo_form.asp?name1=value1&name2=value2

有关 GET 请求的其他一些注释:

GET 请求可被缓存

GET 请求保留在浏览器历史记录中

GET 请求可被收藏为书签

GET 请求不应在处理敏感数据时使用

GET 请求有长度限制

GET 请求只应当用于取回数据

POST 方法

请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.asp HTTP/1.1

Host: w3schools.com

name1=value1&name2=value2

有关 POST 请求的其他一些注释:

POST 请求不会被缓存

POST 请求不会保留在浏览器历史记录中

POST 不能被收藏为书签

POST 请求对数据长度没有要求

实例

#include   <stdio.h>  

#include   <stdlib.h>  

#include   <string.h>  

char InputBuffer[4096];  

int main(int argc, char*argv[])  

{  

int   x, i;  

        int   ContentLength;   /*数据长度*/  

        char   *p=NULL;  

        char   *pRequestMethod;     /*   METHOD属性值   */  

       while(FCGI_Accept()>0)

       {

        /*   从环境变量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));  

                        Data(InputBuffer);    //具体译码和处理数据,该函数代码略     

                }  

         }  

    }

        return   0;  

}

int Data(char *input)    //具体译码和处理数据   

{  

        // 补充具体操作  

        return 0;  

 一般理解了这个例子就可以掌握POST和GET方法数据的获取方式了。

参考:http://blog.csdn.net/naturebe/article/details/7437549

参考:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp


本文出自 “Linux_woniu” 博客,请务必保留此出处http://llu1314.blog.51cto.com/5925801/1965305

以上是关于CGI编程中POSTGET详解的主要内容,如果未能解决你的问题,请参考以下文章

HTTP详解

HTTP详解

HTTP详解

PHP基础入门详解世界上最好用的编程语言

php.ini 配置详解

腾讯T4架构详解Tomcat,给你的技术加分