1. 程式人生 > >python 簡單的web伺服器

python 簡單的web伺服器

     最近在看python相關的東西,在看到python web的時候,居然需要自己編寫Web伺服器,不得不說句,python是個奇怪的東西-_-

python構建最簡單的Web伺服器

  python自帶的包,可以構建一個伺服器,首先進去一個資料夾,作為伺服器的根目錄,比如D:

   命令是:python -m 模組名  埠號,比如 

python -m SimpleHTTPServer 8080
然後就可以在瀏覽器輸入  localhost:8080訪問了


出現這個情況,是因為沒有預設的頁面,手動新增一個index.html就可以看到正常效果了(記得是在根目錄下)

這裡的“Web伺服器模組”有如下三種:


BaseHTTPServer: 提供基本的Web服務和處理器類,分別是HTTPServer和BaseHTTPRequestHandler。

SimpleHTTPServer: 包含執行GET和HEAD請求的SimpleHTTPRequestHandler類。

CGIHTTPServer: 包含處理POST請求和執行CGIHTTPRequestHandler類。


自定義處理程式

   Google在http://chart.apis.google.com 上提供了一個將表單資料自動轉換為圖表的服務。不過,該服務很難互動, 因為你需要將資料作為查詢放到URL中。此程式為一種資料格式提供了更好的的介面: 給定一小段文字,它將呼叫圖表伺服器來生成二維碼(QR碼),這是一種編碼文字的點格矩陣。 該影象可被你的手機攝像頭捕獲,並解釋為一個字串,比如URL, 這樣就免去了你在狹小的手機鍵盤上鍵入URL的麻煩。

程式碼如下qr.py:

#coding=UTF-8
import os	#Python的標準庫中的os模組包含普遍的作業系統功能
import re	#引入正則表示式物件
import urllib	#用於對URL進行編解碼
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler  #匯入HTTP處理相關的模組


#自定義處理程式,用於處理HTTP請求
class TestHTTPHandler(BaseHTTPRequestHandler):
	#處理GET請求
    def do_GET(self):
		#頁面輸出模板字串
        templateStr = '''  
<html>  
	<head>  
		<title>QR Link Generator</title>  
	</head>  
	<body>
	%s
	<br>  
	<br>  
		<form action="/qr" name=f method="GET">
			<input maxLength=1024 size=70 name=s value="" title="Text to QR Encode">
			<input type=submit value="Show QR" name=qr>  
		</form>
	</body>  
</html> '''


	# 將正則表示式編譯成Pattern物件,其中r是raw的意思,表示對字串不進行轉義  print("\bhi")-->hi print(r"\bhi")-->\bhi
	pattern = re.compile(r'/qr\?s=([^\&]+)\&qr=Show\+QR')
	# 使用Pattern匹配文字,獲得匹配結果,無法匹配時將返回None
	match = pattern.match(self.path)
	print(self.path)
	qrImg = ''
		
	if match:
		# 使用Match獲得分組資訊,match.group(1)是url後面的引數,match.group(0)是url本身。。。
		qrImg = '<img src="http://chart.apis.google.com/chart?chs=300x300&cht=qr&choe=UTF-8&chl=' + match.group(1) + '" /><br />' + urllib.unquote(match.group(1)) 
		print(qrImg)

	self.protocal_version = 'HTTP/1.1'	#設定協議版本
	self.send_response(200)	#設定響應狀態碼
	self.send_header("Contect", "Welcome")	#設定響應頭
	self.end_headers()
	self.wfile.write(templateStr % qrImg)	#輸出響應內容
	
#啟動服務函式
def start_server(port):
    http_server = HTTPServer(('', int(port)), TestHTTPHandler)
    http_server.serve_forever()	#設定一直監聽並接收請求

#os.chdir('d:')	#改變工作目錄到 static 目錄
start_server(8080)	#啟動服務,監聽8080埠

進入qr.py,執行python qr.py


在文字框中輸入一個URL,如(http://blog.csdn.net/zy_281870667),點選Show QR,會生成一張二維碼的圖片


掃碼看看