Linux下小型WEB伺服器boa的使用1)

來源:互聯網
上載者:User

這裡不討論代碼的邏輯、風格等問題。
這個程式功能十分簡單,就是列印擷取到的請求字串以及使用者名稱稱和密碼。該程式與普通的C語言程式並無區別,只是多了我們不常用的getenv函數,它在stdlib.h標頭檔中聲明,作用是擷取指定的環境變數的值,比如我的系統中HOME這個環境變數值為/home/latelee/,則該函數返回指向這個值的指標。這裡出現了QUERY_STRING,這是boa特有的環境變數,從字面上理解為“請求字串”,我們列印了這個變數的值,也從該字串中分析得到使用者名稱和密碼,下面將會看到。

在boa原始碼目錄下的examples目錄中有一個cgi程式:cgi-test.cgi,它使用perl語言編寫。將它複製到/var/www/cgi-bin目錄中,在瀏覽器輸入其地址:
http://192.168.184.100/cgi-bin/cgi-test.cgi
則顯示下面的cgi測試程式:

Boa CGI test
Date: Thu Jan 27 13:45:19 CST 2011
Method: GET
Basic GET Form:

Basic POST Form:
Sample ISINDEX form:
/cgi-bin/cgi-test.cgi?param1+param2+param3 Query String:
Arguments:
Environment:
? SCRIPT_NAME = /cgi-bin/cgi-test.cgi
? SERVER_NAME = FightNow
? HTTP_ACCEPT_ENCODING = gzip, deflate
? SERVER_ADMIN =
? REQUEST_METHOD = GET
? SERVER_SOFTWARE = Boa/0.94.13
? REMOTE_PORT = 3892
? HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR

2.0.50727)
? SERVER_PORT = 80
? HTTP_ACCEPT_LANGUAGE = zh-cn
? REMOTE_ADDR = 192.168.184.1
? SERVER_PROTOCOL = HTTP/1.1
? PATH = /bin:/usr/bin:/usr/local/bin
? GATEWAY_INTERFACE = CGI/1.1
? REQUEST_URI = /cgi-bin/cgi-test.cgi
? SERVER_ADDR = 192.168.184.100
? HTTP_HOST = 192.168.184.100
No input stream: (not POST)
id: uid=99(nobody) gid=0(root) groups=99(nobody)
Boa http server

這裡我們看到許多的環境變數以及它們的值,它們可以直接使用getenv函數擷取。QUERY_STRING是用戶端提交的資料,這些資料在傳輸過程中是經過了編碼的,因此,要正確顯示它們,必須進行解碼。

  • 表單中每個欄位用欄位名後跟等號,再接上這個欄位的值來表示,每個欄位之間的內容用“&”連結,前面的程式就是依據“&”進行判斷使用者名稱和密碼的。
  • 空格符號用加號(“+”)代替,而其它的特殊字元,如“!”、“#”等,使用百分比符號(“%”)加對應的ASCII碼來表示。漢字也是這樣表示。

下面是頁面顯示的:

當輸入使用者名稱和密碼分別輸入latelee和latelee.org提交後,將出現如下提示資訊:

The following is query result:
string is: Username=latelee&Password=latelee.org
your username is latelee
your password is latelee.org

可見,程式正確解析出了使用者名稱和密碼,不過當欄位值有空格時,則顯示:

The following is query result:
string is: Username=Late+Lee&Password=Late+Lee
your username is Late+Lee
your password is Late+Lee

可以看到,還沒正確解析出空格(我不知道在欄位值中出現空格本身就是是非法的還是程式的問題)。

當cgi程式採用get方法時,地址欄的變化為:

http://192.168.184.100/cgi-bin/hello.cgi?Username=latelee&Password=latelee.org

而採用post方法時,地址欄為:

http://192.168.184.100/cgi-bin/hello.cgi

未盡事宜:中文解析還沒有完成,當使用者名稱為“李遲”時,顯示如下:

The following is query result:
string is: Username=%C0%EE%B3%D9&Password=123
your username is %C0%EE%B3%D9
your password is 123

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.