在CGI程式中POST和GET訊息的處理

2021-06-05 14:58:07 字數 1701 閱讀 6662

資料傳送格式 當使用者填完**並按了submit按鈕後,web瀏覽器並非將使用者所填的資料直接送給web伺服器, 而先要經過一定的編碼處理。 web瀏覽器總是將資料按照「變數名=變數值」這樣的資料對格式進行編碼,並且每對資料之間 用乙個&符號相連線。其中「變數名」就是form元素中的name屬性值;「變數值」則是使用者在 輸入框中所輸入的資料,或者是使用者所選擇的資料(即radio,checkbox,option中 的value值)。 並且web瀏覽器將使用者資料中的所有空格都替換成"+"號。另外一些特殊字元的表示使用轉義 符"%"後面加上該特殊字元的十六進製制ascii碼。特殊字元主要包括"="、"+"、"&"、"%"以及多 行文字中的回車,換行符,所有不能直接顯示的高位ascii符等。

cgi(common gateway inte***ce,通用閘道器介面)是資訊伺服器(如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   #include   #include   char inputbuffer[4096];

int decodeandprocessdata(char *input); /*具體解碼和處理資料,該函式**略*/

int main(int argc, char*argv)

if (strcasecmp(prequestmethod,"post")==0)

else

if (contentlength > sizeof(inputbuffer)-1)

i = 0;

while (i < contentlength)

inputbuffer[i] = '\0';

contentlength = i;

decodeandprocessdata(inputbuffer); //具體解碼和處理資料,該函式**略

}else if (strcasecmp(prequestmethod,"get")==0)

}printf("\n");//從stdout中輸出返回資訊

printf("the information you supplied has been accepted.\n");

return 0;

}int decodeandprocessdata(char *input) //具體解碼和處理資料

CGI程式中POST和GET訊息的處理

資料傳送格式 當使用者填完 並按了submit按鈕後,web瀏覽器並非將使用者所填的資料直接送給web伺服器,而先要經過一定的編碼處理。web瀏覽器總是將資料按照 變數名 變數值 這樣的資料對格式進行編碼,並且每對資料之間 用乙個 符號相連線。其中 變數名 就是form元素中的name屬性值 變數值...

CGI程式設計入門 GET與POST示例

關於cgi的程式設計,我也還是新手!但只要懂c,則基於c的cgi程式設計就不會很難!下面就get和post方法的應用,做乙個小小的demo,給剛學習cgi程式設計的新手提供一點感性認識!get方法 做乙個加法運算,需要接收兩個引數 檔案get.c如下 include include int main...

CGI例項 表單GET與POST示例

cgi例項 表單get與post示例 get方法 做乙個加法運算,需要接收兩個引數 檔案get.c如下 include include int main void else printf printf printf n printf n printf n return 0 post方法 做乙個乘法運...