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. 瀏覽器訪問
伺服器開啟後,就可以通過瀏覽器輸入網址訪問伺服器資源
http://localhost:port/directory
如在主路徑下準備好info.xml檔案後,可通過在瀏覽器輸入http://localhost:1000/info.xml進行訪問
3. 伺服器關閉
1) dos
在執行介面中輸入 "ctrl + C" 停止
2)python指令碼
需停止埠監聽及相關python程式
def stop_server(server)
server.sorket.close()
相關文章
- python如何實現簡單的爬蟲功能?Python學習教程!Python爬蟲
- 使用Python建立簡單的HTTP伺服器PythonHTTP伺服器
- Netty(二) 實現簡單Http伺服器NettyHTTP伺服器
- Python 臨時啟動簡單的 HTTP 伺服器PythonHTTP伺服器
- Python學習6之簡單實戰Python
- tcp 實現簡單http 問題TCPHTTP
- 《機器學習Python實現_10_10_整合學習_xgboost_原理介紹及迴歸樹的簡單實現》機器學習Python
- python 爬取 blessing skin 的簡單實現Python
- Python實現簡單的excel對比工具PythonExcel
- 簡單的零配置命令http伺服器:http-server入門HTTP伺服器Server
- 如何使用Python實現FTP伺服器?Python學習教程PythonFTP伺服器
- 在 Golang 中實現一個簡單的Http中介軟體GolangHTTP
- HTTP簡明學習HTTP
- Python實現簡單驗證碼的轉文字Python
- Python技法:實現簡單的遞迴下降ParserPython遞迴
- PHP 實現 HTTP 表單請求伺服器PHPHTTP伺服器
- 用 Python 快速實現 HTTP 和 FTP 伺服器PythonHTTPFTP伺服器
- 標準庫 http 包的簡單實用HTTP
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 實現簡單的BitMap
- ArrayList的簡單實現
- Nodejs快速搭建簡單的HTTP伺服器詳細教程。NodeJSHTTP伺服器
- 簡單介紹python中的單向連結串列實現Python
- Netty、MINA、Twisted一起學系列01:實現簡單的TCP伺服器NettyTCP伺服器
- 使用 python 實現簡單的共享鎖和排他鎖Python
- Python實現簡單的udp打洞(P2P)PythonUDP
- 用python實現簡單的線上翻譯程式Python
- 簡單的python程式碼實現語音朗讀Python
- Golang學習筆記 – 標準庫”net/http”的簡析及自制簡單路由框架Golang筆記HTTP路由框架
- 《圖解HTTP》——簡單的HTTP協議圖解HTTP協議
- Python實現簡單負載均衡Python負載
- python實現簡單猜單詞遊戲Python遊戲
- ZooKeeper學習筆記三:使用ZooKeeper實現一個簡單的配置中心筆記
- 關於 WebSocket 和 HTTP 區別的思考以及一個最簡單的 WebSocket 的客戶端和伺服器實現WebHTTP客戶端伺服器
- 簡單的實現vue原理Vue
- 簡單的實現React原理React
- [Linux]簡單的shell實現Linux
- java實現簡單的JDBCJavaJDBC