Python的學習(十四)---- 實現簡單的HTTP伺服器
用Python實現簡單的HTTP伺服器
用於搭建http server的模組有如下三種:
1)BaseHTTPServer:提供基本的Web服務和處理器類,分別是HTTPServer及BaseHTTPRequestHandler;
2)SimpleHTTPServer:包含執行GET和HEAD請求的SimpleHTTPRequestHandler類;
3)CGIHTTPServer:包含處理POST請求和執行的CGIHTTPRequestHandler類。
在我目前的實現中,主要採用BaseHTTPServer模組。
一、 BaseHTTPServer模組
HTTPServer是一個SocketServer.TCPServer的子集,建立並監聽HTTP套接字,分配requests到處理器(handler), BaseHTTPRequestHandler在HTTP請求到達時進行處理,但其自身並不能對請求作出相應,由另一個派生類來處理每一個請求方法。BaseHTTPRequestHandler為子集提供許多類變數、例項變數和方法,其分析請求物件和請求頭部,並根據請求型別呼叫相應的方法。一般這個模組不被直接使用,而是被用來作為構建功能性Web伺服器的一個基類。
BaseHTTPRequestHandler其中的例項變數有:
1)client_address 包含關聯的客戶端地址(host, port)
2)command 包含請求型別(eg: get )
3)path 包含的請求路徑
4)request_version 包含請求版本的字串(eg: 'HTTP/1.0')
5)headers
6)rfile 輸入流
7)wfile 包含寫到客戶端響應的輸出流
BaseHTTPRequestHandler的類變數有:
1)server_version 指定伺服器軟體版本
2)sys_version Python系統版本
3)error_message_format
4)protocol_version 響應中使用的HTTP協議版本
BaseHTTPRequestHandler部分操作
1)handle()
2)send_error(code[, message]) 傳送並記錄一個完整的錯誤回覆到客戶端
3)send_response(code[, message]) 傳送一個響應頭並記錄已接收的請求
4)send_header(keyword, value) 編寫一個指定的HTTP頭到輸出流
5)version_string() 飯後伺服器軟體的版本字串
日誌記錄相關部分沒有一一列出。。。。
二、簡單建立server例項
以下是一個簡單的建立http server的例子,網上有些是採用多執行緒實現的比較複雜的例子
1. 建立server
1)DOS 命令
在DOS裡cd到準備做伺服器根目錄的路徑下,執行命令
python -m BaseHTTPServer [port]
預設的埠號是8000, 伺服器根目錄就是執行python命令的工作目錄,server建立好後預設啟動成功
2)Python指令碼啟動
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class TestHTTPHandle(BaseHTTPRequestHandler):
def do_GET(self):
buf = 'It works"
self.protocal_version = “HTTP/1.1"
self.send_response(200)
self.send_header("Welcome", "Contect")
self.end_headers()
self.wfile.write(buf)
def start_server(port):
http_server = HTTPServer(('[IP]', int(port)), TestHTTPHandler)
http_server.serve_forever() #設定一直監聽並接收請求
其中,IP為給localhost設定的訪問地址
2. 瀏覽器訪問
3. 伺服器關閉
1) dos
在執行介面中輸入 "ctrl + C" 停止
2)python指令碼
需停止埠監聽及相關python程序
def stop_server(server)
server.sorket.close()