用c編寫cgi程式

2021-04-14 05:40:21 字數 3673 閱讀 9984

cgi的工作原理介紹:cgi(common gateway inte***ce)是乙個web伺服器提供資訊服務的標準介面,通過這樣乙個介面,web伺服器能夠執行程式,並將程式輸出的資訊返回給瀏覽器。因為在web網上的資料都是靜態的,通過cgi程式能夠動態的處理瀏覽者的請求,如儲存使用者輸入的資訊,根據使用者資訊返回相關的資料等等。當客戶端傳送乙個cgi請求給web伺服器後,web伺服器將根據cgi程式的型別決定資料向cgi程式的傳送方式,一般來講是通過標準輸入/輸出流和環境變數來與cgi程式間傳遞資料。

cgi輸入輸出原理

cgi的輸入/輸出方法:cgi程式通過標準輸入(stdin)和標準輸出(stdout)來進行輸入輸出,stdin和stdout是兩個預先定義好的檔案指標。你可以利用檔案讀寫函式來對其進行操縱。

此外cgi程式還通過環境變數來得到輸入,只不過環境變數中提供的是一些常用的資訊,並且通常不包括使用者在web頁面中輸入的資訊(除使用下面講的get方法時,通過檢查環境變數query_string來得到輸入資料),而stdin通常用來傳遞使用者輸入的資訊。在普通cgi程式開發中我們需要關心的環境變數有以下這些:

一部分是與web伺服器有關的環境變數:

一部分是與執行cgi有關的:

一部分是與客戶方有關的:

在輸入時所使用的post/get方法:在web頁面向cgi傳送資料時通常採用兩種方法:get/post,get方法將資料附加在url後傳送,如:/cgi/a_cgi_test.exe?your_data,cgi程式通過檢查環境變數query_string來得到輸入資料。而post方法則會將資料送入cgi程式的stdin輸入流。在表單(form)中的各個變數都會成為name=value的形式向web伺服器傳送,多個資料間用&分隔,如:name=value&name2=value2。其中名字(name,name2)是form中定義的input、select或textarea等標置(tag)名字,值是使用者輸入或選擇的標置值。

有了上面的知識我們就可以馬上寫乙個簡單的cgi程式了。**如下:

如上面說講,在cgi程式輸出時必須先輸出乙個cgi標題,標題共有以下三類:

注意每種標題後都必須跟乙個換行和乙個空行。

mime型別以型別/子型別的形式來表示,下面是一些常用的型別/子型別的組合:

有了上面的知識我們就可以寫出一些cgi程式,首先需要對輸入資料進行分析,方法為:每當找到字元=,標誌著乙個form變數名字的結束;每當找到字元& ,標誌著乙個form變數值的結束。請注意輸入資料的最後乙個變數的值不以&結束。這樣我們可以將輸入資料分解為一組一組的指。

但隨後會發現cgi的輸入並不規則,例如有時會出現類似下面格式的輸入字符號串:filename=hello&cmd=world+i%27,這是因為瀏覽器對一些上傳的特殊字元進行了編碼,所以在將資料分解開後需要進行解碼,解碼規則為:+:將+轉換成空格符;%xx:用其十六進製制ascii碼值表示的特殊字元(%做為轉意符)。根據值xx將其轉換成相應的ascii字元。對form變數名和變數值都要進行這種轉換。下面是乙個對form資料進行分析並將結果回送給web伺服器的cgi程式。

上面的程式首先輸出乙個mime頭資訊給web伺服器,檢查輸入中的字元數,並迴圈檢查每乙個字元。

當發現字元為&時,意味著乙個名字/值對的結束,程式輸出乙個空行;當發現字元為+時,將它轉換成空

格; 當發現字元為%時,意味著乙個兩字元的十六進製制值的開始,呼叫htoi()函式將隨後的兩個字元轉換

為相應的ascii字元;當發現字元為=時,意味著乙個名字/值對的名字部分的結束,並將它轉換成字元:。

最後將轉換後的字元輸出給web伺服器。

開發cgi程式可以按照下面的步驟進行:

1、判斷資料輸入方法為get或是post。

2、讀取資料,根據分隔符號&分解每個接收的表單變數,並同時對資料進行解碼。

3、處理資料。

4、輸出cgi標題,輸出html資料。

5、退出。

利用c語言開發cgi需要自己對輸入的資料進行分析,但字符號串處理並非c語言的強項,所以我向

大家推薦一套我認為比較不錯的開發包,

cgic

,(由http://www.boutell.com/boutell/

一部分是與web伺服器有關的環境變數:

一部分是與執行cgi有關的:

一部分是與客戶方有關的:

在輸入時所使用的post/get方法:在web頁面向cgi傳送資料時通常採用兩種方法:get/post,get方法將資料附加在url後傳送,如:/cgi/a_cgi_test.exe?your_data,cgi程式通過檢查環境變數query_string來得到輸入資料。而post方法則會將資料送入cgi程式的stdin輸入流。在表單(form)中的各個變數都會成為name=value的形式向web伺服器傳送,多個資料間用&分隔,如:name=value&name2=value2。其中名字(name,name2)是form中定義的input、select或textarea等標置(tag)名字,值是使用者輸入或選擇的標置值。

有了上面的知識我們就可以馬上寫乙個簡單的cgi程式了。**如下:

如上面說講,在cgi程式輸出時必須先輸出乙個cgi標題,標題共有以下三類:

注意每種標題後都必須跟乙個換行和乙個空行。

mime型別以型別/子型別的形式來表示,下面是一些常用的型別/子型別的組合:

有了上面的知識我們就可以寫出一些cgi程式,首先需要對輸入資料進行分析,方法為:每當找到字元=,標誌著乙個form變數名字的結束;每當找到字元& ,標誌著乙個form變數值的結束。請注意輸入資料的最後乙個變數的值不以&結束。這樣我們可以將輸入資料分解為一組一組的指。

但隨後會發現cgi的輸入並不規則,例如有時會出現類似下面格式的輸入字符號串:filename=hello&cmd=world+i%27,這是因為瀏覽器對一些上傳的特殊字元進行了編碼,所以在將資料分解開後需要進行解碼,解碼規則為:+:將+轉換成空格符;%xx:用其十六進製制ascii碼值表示的特殊字元(%做為轉意符)。根據值xx將其轉換成相應的ascii字元。對form變數名和變數值都要進行這種轉換。下面是乙個對form資料進行分析並將結果回送給web伺服器的cgi程式。

上面的程式首先輸出乙個mime頭資訊給web伺服器,檢查輸入中的字元數,並迴圈檢查每乙個字元。

當發現字元為&時,意味著乙個名字/值對的結束,程式輸出乙個空行;當發現字元為+時,將它轉換成空

格; 當發現字元為%時,意味著乙個兩字元的十六進製制值的開始,呼叫htoi()函式將隨後的兩個字元轉換

為相應的ascii字元;當發現字元為=時,意味著乙個名字/值對的名字部分的結束,並將它轉換成字元:。

最後將轉換後的字元輸出給web伺服器。

開發cgi程式可以按照下面的步驟進行:

1、判斷資料輸入方法為get或是post。

2、讀取資料,根據分隔符號&分解每個接收的表單變數,並同時對資料進行解碼。

3、處理資料。

4、輸出cgi標題,輸出html資料。

5、退出。

利用c語言開發cgi需要自己對輸入的資料進行分析,但字符號串處理並非c語言的強項,所以我向

大家推薦一套我認為比較不錯的開發包,

cgic

,(由http://www.boutell.com/boutell/

如何編寫CGI程式

cgi的工作原理介紹 cgi mon gateway inte ce 是乙個web伺服器提供資訊服務的標準介面,通過這樣乙個介面,web伺服器能夠執行程式,並將程式輸出的資訊返回給瀏覽器。因為在web網上的資料都是靜態的,通過cgi程式能夠動態的處理瀏覽者的請求,如儲存使用者輸入的資訊,根據使用者資...

D 語言編寫CGI程式

編寫main.d,內容如下 import arsd.cgi void yourfunction cgi cgi mixin genericmain yourfunction 用命令編譯程式,得到可執行程式main dmd main.d cgi.d 直接執行main,可以看到輸出的是http響應。ca...

用c寫CGI 程式簡要指南

將 轉換成空格符 xx 用其十六進製制ascii碼值表示的特殊字元。根據值xx將其轉換成相應的ascii字元。對form變數名和變數值都要進行這種轉換。下面是乙個對form資料進行分析並將結果回送給web伺服器的cgi程式。include include include int htoi char ...