2012年3月1日 星期四

CGI Overview (Based on C++)

CGI (Common Gateway Interface) Overview
  • CGI 的角色定位
  • C++ Output
    • 如果我們想要利用 C++ 在畫面上呈現出"Hello World!"的字串,我們通常會用下列的程式碼:
    • 但是如果是想要在瀏覽器上呈現出"Hello World!"的頁面,我們還有更多動作需要做,這時就需要 CGI 的支援。
  • Content-Type Header
    • 每一個 CGI Script 都必須優先輸出以 MIME 形式表示的 Content-Type Header,舉例來說:text/plain 表示純文字內容輸出;text/html 表示一個 HTML 的網頁。實際上的程式碼可能是如下所示:
  • First Simple CGI Script
    • 如上所言,我們可以簡單的寫出一個 CGI Script 如下:
    • 為使它更符合標準的網頁結構,並善用 HTML 所提供的 Tag 來美化它,可將其改為如此。
    • 如此一來,瀏覽器便能正確的解析它的內容。
  • Using HTTPd Environment Variables
    • 當我們在伺服器上利用 HTTPd Server 執行 CGI Script ,HTTPd Server 會利用許多環境變數來存放資料,我們可以用 getenv() 來取用這些環境變數,以下就以取得 Client IP address 的 CGI Script 做示範。
    • 你也可以秀出當前時間或是顯示使用者的瀏覽器類型(利用 HTTP_USER_AGENT 參數)
  • Receiving Data From Form
    • 接下來介紹使用 Http "POST" 的方式進行資料傳遞,CGI Script 可透過 STDIN 取得Data,當 HTTPd 收到資料後會先放在一塊輸入緩衝區,並將資料大小紀錄在CONTENT_LENGTH (環境變數),再以 CGI 程式的 STDIN 指向此塊緩衝區,在 C++ 下最簡單的方法是透過 fread() function 取得資料。
    • 下面用一個 HTML <FORM> 來說明 POST 資料的運作過程:
    • 當使用者送出這個表單,CGI Script 將透過 STDIN 收到以下的資料。
    • value1=test1&value2=test2&value3=test3
    • CGI Script 接收資料並回覆的程式碼內容可能如下:
  • Parsing The Form Data
    • 這裡有兩個關於CGI Library的檔案,接下來我們會使用到它們內部的函式跟功能,它們提供兩個 Classes: CCGI 跟 CCGItem,可以更方便的處理資料。
    • 以下是它們的運作方式:建立一個 CCGI 跟 CCGItem,呼叫 CCGI::Load() 來讀取資料,接著呼叫 CCGI::GetItemCount() 來取得被送出的數量,然後利用 CCGI::GetItem 來取得資料,以一個指標指向已填入相對應 item name & value 的 CCGItem ,呼叫 GetName() 以及 GetValue() 進行資料取用。請參考如下的程式碼:
現在你應該對於 CGI based on C++ 有了基本的認識,接下來你可以嘗試寫更有用且具有互動性的 CGI 程式。

0 意見: