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