C語言寫cgi,個人的cgi庫

2021-08-27 16:32:35 字數 1744 閱讀 6113

cgi程式可以用c、c++、perl等多種語言編寫。本文以乙個最簡單的表單提交和cgi處理為例,示範了如何使用c語言編寫處理表單的cgi程式,這裡的有本人寫的乙個很小的cgi庫——一些相關的函式。更多關於cgi的背景知識,網上有很多介紹。

表單頁面**如下:

自製的cgi庫cgilib的標頭檔案:

#ifndef _cgilib_h_

#define _cgilib_h_

#include"stdbool.h"

#include#include/*判斷請求方式是否為post*/

bool isposttype();

/*判斷請求方式是否為get*/

bool isgettype();

/**功能:url編碼的解碼

*dest_str 指向原始字串

*aim_str 指向乙個將用於儲存解碼後的資料的字元陣列

*/char *unencode(const char *dest_str, char *aim_str);

/**功能:從url中提取出name對應的value,若查詢不到,則返回null

*url:表單提交的資料,已經過解碼

*name:表單元素的name

*value:表單元素的值

*注意:本函式假定url的字元為嚴格的name1=value1&name2=value2&……的格式,

且在name和value中不出現字元『=』和『&』

*/char *getvalue(const char *url, const char *name, char *value);

#endif /*_cgilib_h_*/

執行的cgidemo.c程式:

#include#include"cgilib.h"

int main()

else if(isgettype())

/*獲取提交的資料,解碼*/

if(getenv("content_length"))

printf("提交的字元數%d\n\n", n);

scanf("%s", &url);

url[n] = '\0';

printf("解碼前的提交資料:%s\n\n", url);

printf("解碼後的提交資料:%s\n\n", unencode(url, data));

/*提取表單元素的資料*/

printf("暱稱:%s\n\n", getvalue(data, "usrname", value));

printf("密碼:%s\n\n", getvalue(data, "usrpassword", value));

fflush(stdout);

return 0;

}

安裝xamp,將上面的網頁(cgites)放到xamp資料夾下的htdocs資料夾下,將cgidemo.c編譯後產生的可執行檔案(cgidemo.exe)放到cgi-bin資料夾下。在瀏覽器輸入:localhost/cgitest.html 。在顯示的網頁中填寫資訊,如下圖:

提交表單,處理結果如下:

C語言寫CGI 程式簡要指南

cgi common gateway inte ce 公用閘道器介面 規定了web伺服器呼叫其他可執行程式 cgi程式 的介面協議標準。web伺服器通過呼叫cgi程式實現和web瀏覽器的互動,也就是cgi程式接受web瀏覽器傳送給web伺服器的資訊,進行處理,將響應結果再回送給web伺服器及web瀏...

C語言CGI上傳檔案

找到的資料 用於向嵌入式linux系統上跑的簡單web服務上傳檔案 說一下原理 把檔案的post表單域安排在post資料流的最後部分,根據 content length的長度和post流的固定的資料格式,計算出上傳的檔案大小,然後從流中邊讀邊寫這個大小的資料存入檔案就可以了,因為表單 的提交直接是無...

C語言進行CGI程式設計

一 cgi概述 cgi 公用閘道器介面 規定了web伺服器呼叫其他可執行程式 cgi程式 的介面協議標準。web伺服器通過呼叫cgi程式實現和web瀏覽器的互動,也就是cgi程式接受web瀏覽器傳送給web伺服器的資訊,進行處理,將響應結果再回送給web伺服器及web瀏覽器。cgi程式一般完成web...