原文地址 基於Python的CGIHTTPServer簡單的互動實現 介紹
對於伺服器後端開發人員而言,有時候需要把自己的一些服務直接暴露給PM或者其他RD使用,這個時候需要搭建一套web服務可以和前端使用者做簡單互動,按照最常規的做法,一般是用Apache或者Nginx作為webserver後端使用cgi或者fcgi程式或者指令碼進行處理,當然這種做法安全且正規。
但是我個人更喜歡一個更簡單的做法:就是利用python內建的CGIHTTPServer作為伺服器,然後通過一個簡單的html頁面進行互動,通過post請求直接調用總控指令碼,與使用者進行互動。
使用方法和樣本 啟動服務
Python的CGIHTTPServer一般是與python一起安裝的,使用如下命令既可以啟動,為了便於組織目錄,建議先建立一個目錄,比如web,然後再運行下面的命令。
nohup python -m CGIHTTPServer 8088 &
上面的命令使CGIHTTPServer在非中斷後台運行,運行log可以通過目前的目錄下的nohup.out查看。 編寫互動頁面
在啟動server的目前的目錄下,建立一個index.html檔案,編寫內容如下。
<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <title> Python-CGIHTTPServer使用樣本 </title> <meta name="author" content="Haiyu"> <center><h1> Python-CGIHTTPServer使用樣本 </h1></center> </head> <hr style="height:5px;border:none;border-top:5px ridge green;" /> <body> <br/> <center><h2>計算圓的周長</h2></center> <center> <p>請輸入圓的半徑長度.</p> <br/> <form action="cgi-bin/c_length.sh" method="post" enctype="text/plain" target="_blank"> radius:<input type="text" id="radius" name="radius" value=""/> <input type="submit" id="c_length" name="c_length" value="計算周長"> </form> </center> <br/> <br/> <br/> </body> <hr style="height:5px;border:none;border-top:5px ridge green;" /> <br/> <br/></html>
這個介面的功能非常簡單,使用一個form表單接收使用者的提交的半徑參數,然後計算完周長之後進行返回,使用post請求。 CGI指令碼
這個才是我們後端開發同學最關心的內容,這個指令碼就是用來完成主要的邏輯操作進行返回,因為我們後端同學關注更多的不是互動介面的華麗而是邏輯處理的正確性和嚴謹性,根據我的經驗,後端不管多麼複雜的處理流程,最終都可以用一個指令碼包起來,根據輸入得到輸出,這裡面的輸入就是我們使用者提交的參數,輸出就是我們經過層層處理之後需要返回的內容。
這個指令碼建議放在server運行目錄下建立立的cgi-bin目錄中。
#!/bin/bashmysql_bin=/home/work/mysql/bin/mysqlecho "Content-Type:text/html; Charset=gbk"echo ""echo "<br/>"radius=0c_length=0if [[ "$REQUEST_METHOD" == "POST" ]];then read vars echo "$vars" | awk -F "=" '{print $2}' > temp dos2unix temp radius=`cat temp` c_length=$(echo "scale=2;2*3.14*$radius" | bc) echo "<br/>" echo "<table border="5" cellpadding="10">" echo "Userid Info:" echo "<tr>" echo "<td>半徑</td><td>周長</td>" echo "</tr>" echo "<tr>" echo "<td>"$radius"</td><td>"$c_length"</td>" echo "</tr>" echo "</table>"fi
總結
以上就是使用Python的CGIHTTPServer進行使用者互動的主要內容,其優點就是開發使用方便,讓後端同學能更加專註於商務邏輯處理相關的內容。不足之處可能就是不夠正規,使用有風險,因為使用的是純CGI協議互動,記得之前排查過一個bash的cgi漏洞,使用起來可能會有風險,因此這種方式更適合開發一套對內使用的簡易工具,不建議對外部使用者暴露。