Python標準庫中的BaseHTTPServer模組實現了一個基礎的HTTP伺服器基類和HTTP請求處理類。這在文章BaseHTTPServer——實現Web伺服器中進行了相關的介紹。然而,BaseHTTPServer模組中並沒有定義相關的請求方法,諸如GET、HEAD、POST等。在BaseHTTPServer模組的基礎上,Python標準庫中的SimpleHTTPServer模組實現了簡單的GET、HEAD請求。
在該模組中,它沿用了BaseHTTPServer模組中實現的HTTPServer伺服器,這裡就不再贅述。而請求處理類則是繼承了BaseHTTPServer模組中的BaseHTTPRequestHandler類。SimpleHTTPServer模組實現了具有GET、HEAD請求方法的HTTP通訊服務。根據文章BaseHTTPServer——實現Web伺服器中的介紹,只需要在請求處理類中定義do_GET()和do_HEAD()方法即可。
do_GET()
do_GET()方法的原始碼如下:
1 2 3 4 5 6 7 8 |
def do_GET(self): """Serve a GET request.""" f = self.send_head() if f: try: self.copyfile(f, self.wfile) finally: f.close() |
在這個方法中,它呼叫了send_head()方法來返回一個響應。send_head()方法會呼叫send_response()、send_header()、send_error()方法等設定響應報文等。
do_HEAD()
do_HEAD()方法的原始碼如下:
1 2 3 4 5 |
def do_HEAD(self): """Serve a HEAD request.""" f = self.send_head() if f: f.close() |
do_HEAD()方法和do_GET()方法的實現類似。
測試例子
SimpleHTTPServer模組還提供了一個測試函式。只需要在命令列中執行如下程式碼:
1 |
python SimpleHTTPServer.py # SimpleHTTPServer.py指代Python標準庫中的SimpleHTTPServer模組,注意檔案位置。 |
如果在本地環境中執行以上程式碼,將會呼叫請求處理類的translate_path和list_directory方法展示一個檔案目錄。
然後在瀏覽器中訪問127.0.0.1:8000即可檢視SimpleHTTPServer.py檔案所在目錄下的所有檔案。