1. 程式人生 > >CGI編程中POST、GET詳解

CGI編程中POST、GET詳解

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詳解