码迷,mamicode.com
首页 > 其他好文 > 详细

CGI编程中POST、GET详解

时间:2017-09-14 23:44:55      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:cgi编程中post、get详解

什么是 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编程中POST、GET详解

标签:cgi编程中post、get详解

原文地址:http://llu1314.blog.51cto.com/5925801/1965305

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!