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()
相關文章
- 實現一個簡單的FTP伺服器(十四)FTP伺服器
- 用python或者perl實現簡單的http伺服器目錄共享PythonHTTP伺服器
- 使用Python建立簡單的HTTP伺服器PythonHTTP伺服器
- C#實現一個最簡單的HTTP伺服器C#HTTP伺服器
- python如何實現簡單的爬蟲功能?Python學習教程!Python爬蟲
- Netty(二) 實現簡單Http伺服器NettyHTTP伺服器
- Python 臨時啟動簡單的 HTTP 伺服器PythonHTTP伺服器
- 《圖解HTTP》學習筆記(二):簡單的HTTP協議圖解HTTP筆記協議
- Node 學習 -- 搭建簡單的伺服器伺服器
- 用Python socket 實現一個簡單的http伺服器(post 與get 的區別)、CGI、WSGI、MVCPythonHTTP伺服器MVC
- Python學習6之簡單實戰Python
- tcp 實現簡單http 問題TCPHTTP
- python下ssh的簡單實現Python
- 簡單實用的《http小書》HTTP
- 最簡單的web伺服器實現(一)Web伺服器
- 用原生http 實現簡單 Express 框架HTTPExpress框架
- SimpleHTTPServer ——一個簡單的HTTP伺服器HTTPServer伺服器
- 一個用C#實現的簡單http server (轉)C#HTTPServer
- HTTP簡明學習HTTP
- 簡單的零配置命令http伺服器:http-server入門HTTP伺服器Server
- Python爬蟲學習(5): 簡單的爬取Python爬蟲
- nginx學習筆記(2):開發一個簡單的HTTP模組Nginx筆記HTTP
- PHP 實現 HTTP 表單請求伺服器PHPHTTP伺服器
- 在 Golang 中實現一個簡單的Http中介軟體GolangHTTP
- Python實現簡單的excel對比工具PythonExcel
- 《機器學習Python實現_10_10_整合學習_xgboost_原理介紹及迴歸樹的簡單實現》機器學習Python
- 如何使用Python實現FTP伺服器?Python學習教程PythonFTP伺服器
- Swoole學習(四)Swoole之簡單WEB伺服器的建立Web伺服器
- Swoole學習(五)Swoole之簡單WebSocket伺服器的建立Web伺服器
- LVM的簡單學習LVM
- 實現簡單的BitMap
- ArrayList的簡單實現
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 簡單的Filter實現Filter
- Promise的簡單實現Promise
- 標準庫 http 包的簡單實用HTTP
- 開發一個簡單的 HTTP 伺服器應用HTTP伺服器