boa-0.94.13:Form CGI Echo

說明,部分代碼來源網絡

Form CGI 是什麼

        這是我自己起的名字。CGI通用網關接口程序,如果不能從客戶端瀏覽器獲取參數,將沒有任何意義。那麼CGI程序如何獲取客戶端用戶輸入的參數呢?這裏主要依靠HTTPGETPOST方法,提取HTMLform表單項目,組成name1=value1&name2=value2....格式的字符串。這樣的字符串有一個名字叫做URLEndcode,這也是有標準定義的,具體可以百度一下。

        Web服務器收到後,將此字符串放入環境變量QUERY_STRING中,CGI程序通過解析QUERY_STRING還原瀏覽器客戶端參數。CGI程序在得到這些參數後,就可以做自己的事情了,做完之後,不要忘了把處理結果返回給瀏覽器。

ECHO測試

         FormCGI ECHO測試就是用戶通過瀏覽器輸入什麼內容,CGI程序接收後返給用戶的內容就是什麼。

測試頁面

        頁面測試效果如圖1所示,form表單項目有nameemailmsg。由於頁面HTML代碼比較多,可以到這裏下載測試:cgi_form.html

1

        當用戶點擊Call CGI按鈕後,成功將用戶輸入提交給了cgi_form.sh程序,cgi_form.sh程序最終將用戶輸入的內容又返回給瀏覽器。效果如下圖2所示。

2

 CGI程序

        瀏覽器網提交給服務器的是這樣的字符串:

        cgi_form.sh?name=hyx&[email protected]&msg=hello+cgi+form&action=Call+CGI

        其中cgi_form.shCGI程序,用戶輸入的參數都在裏面,cgi_form.sh通過解析上面問號後面的字符串,得到參數值,然後將參數值返回給瀏覽器。

        Shell腳本解析字符串(URLDecode編碼),從網上找到了一個現成的腳本來實現字符串解析。它的名字叫proccgi.sh,可網上搜索下載,也可以去這下載proccgi.sh

        以下是cgi_form.sh的全部內容:

#!/bin/sh

eval `./proccgi.sh $*`

echo "Content-type:text/html"

echo ""

echo "<html>"

echo "<head><title>CGI Form</title></head>"

echo "<body>"

echo "<h2>Server Got you parametes! Right!?^_^</h2>"

echo "<h2>Name  :$FORM_name </h2>"

echo "<h2>Email   :$FORM_email </h2>"

echo "<h2>Message : $FORM_msg </h2>"

echo "</body>"

echo "</html>"

總結

         如果CGI程序要處理用戶參數,必須要有解析QUERY_STRING的功能,說的規範點就是必須有符合CGI 1.1規範的解析程序。比如本例中使用到的proccgi.sh就是一個shell腳本處理CGI參數,具體用法已經體現在cgi_form.sh腳本中。

問題&思考

         由於我使用的瀏覽器是win7中文版IE,cgi_form.html也沒有指定內容的字符集,IE瀏覽器打開測試頁面cgi_form.html自動選擇簡體中文。如果通過瀏覽器輸入中文,提交以後會是什麼效果呢?

       下一遍文章將會對這一問題與思考給出解釋與解決方案。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章