Python中的http.server庫用法詳細介紹
前言
http.server 是 Python 標準庫中的一個模塊,用于創(chuàng)建基本的 HTTP 服務器。這個模塊非常適合用于開發(fā)、測試、以及在本地網絡中共享文件。以下是對 http.server 模塊的詳細介紹。
Python 官方文檔:http.server — HTTP 服務器
模塊概述
http.server 提供了基本的 HTTP 請求處理功能,它包含了以下幾個核心類和方法:
http.server.BaseHTTPRequestHandler:這是所有請求處理類的基類,提供了處理 HTTP 請求的基本框架。它定義了處理 HTTP 請求的方法(如 do_GET、do_POST 等),這些方法需要在子類中被實現(xiàn)或重寫。
http.server.SimpleHTTPRequestHandler:這是 BaseHTTPRequestHandler 的一個子類,專門用于處理簡單的 GET 和 HEAD 請求。它可以直接用于服務文件系統(tǒng)中的文件,支持簡單的文件目錄瀏覽。
http.server.CGIHTTPRequestHandler:這是 SimpleHTTPRequestHandler 的一個子類,支持 CGI 腳本的執(zhí)行。它允許通過服務器運行 CGI 腳本,適用于簡單的動態(tài)網頁服務器。
http.server.HTTPServer:這是一個具體的 HTTP 服務器類,基于 socketserver.TCPServer 實現(xiàn)。它用于處理客戶端的請求并生成響應。
http.server.ThreadingHTTPServer:這是 HTTPServer 的多線程版本,每個請求都會由一個單獨的線程來處理。
基本用法
以下是如何使用 http.server 模塊的基本示例:
1. 啟動一個簡單的 HTTP 服務器
在命令行中,快速啟動一個 HTTP 服務器來服務當前目錄中的文件:
python -m http.server 8000
這將在當前目錄下啟動一個 HTTP 服務器,監(jiān)聽端口 8000。
2. 使用 Python 代碼啟動服務器
from http.server import SimpleHTTPRequestHandler, HTTPServer
# 設置服務器地址和端口
server_address = ('', 8000)
# 創(chuàng)建服務器對象
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
# 啟動服務器
print("Serving on port 8000...")
httpd.serve_forever()
這段代碼啟動了一個 HTTP 服務器,并在 localhost 的 8000 端口上監(jiān)聽。
3. 自定義請求處理程序
通過繼承 SimpleHTTPRequestHandler,你可以自定義服務器對特定請求的響應:
from http.server import SimpleHTTPRequestHandler, HTTPServer
class MyRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/hello':
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"Hello, World!")
else:
super().do_GET()
# 創(chuàng)建服務器對象
httpd = HTTPServer(('', 8000), MyRequestHandler)
# 啟動服務器
print("Serving on port 8000...")
httpd.serve_forever()
4. CGI 支持
使用 CGIHTTPRequestHandler 運行支持 CGI 腳本的服務器:
from http.server import HTTPServer, CGIHTTPRequestHandler
# 設置服務器地址和端口
server_address = ('', 8000)
# 啟用CGI處理程序
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
# 啟動服務器
print("Serving on port 8000 with CGI support...")
httpd.serve_forever()
CGI 處理程序允許你在服務器上運行諸如 Python 腳本等 CGI 程序。
5. 啟用 HTTPS 支持
雖然 http.server 默認只支持 HTTP,但可以通過 ssl 模塊添加 HTTPS 支持:
from http.server import SimpleHTTPRequestHandler, HTTPServer
import ssl
# 創(chuàng)建服務器對象
httpd = HTTPServer(('', 8000), SimpleHTTPRequestHandler)
# 添加SSL/TLS層
httpd.socket = ssl.wrap_socket(httpd.socket,
keyfile="path/to/key.pem",
certfile='path/to/cert.pem',
server_side=True)
# 啟動服務器
print("Serving on https://localhost:8000...")
httpd.serve_forever()
關鍵方法和屬性
- do_GET(self):處理 GET 請求。子類可以重寫此方法以自定義處理邏輯。
- do_POST(self):處理 POST 請求。子類可以重寫此方法。
- send_response(self, code, message=None):發(fā)送 HTTP 響應代碼和可選的消息。
- send_header(self, keyword, value):發(fā)送 HTTP 標頭。
- end_headers(self):發(fā)送 HTTP 響應的結束標記。
- log_message(self, format, *args):記錄服務器日志信息。
優(yōu)缺點
優(yōu)點:
- 簡單易用:非常適合開發(fā)和測試階段。
- 內置于Python標準庫:不需要安裝任何額外的依賴。
- 輕量級:啟動速度快,適合小型任務。
缺點:
- 功能有限:不適合用于生產環(huán)境,缺乏復雜的認證、日志記錄和錯誤處理機制。
- 性能瓶頸:由于是單線程(除非使用 ThreadingHTTPServer),在高并發(fā)情況下性能較差。
總結
http.server 是一個非常有用的工具,可以快速搭建一個基本的 HTTP 服務器,尤其是在開發(fā)和測試階段。但它并不適合作為生產環(huán)境的服務器。如果你需要更強大的功能和性能,建議使用專門的 Web 框架或服務器軟件,如 Flask、Django、或者 Nginx、Apache 等。
相關文章
Python實戰(zhàn)之ATM取款機的實現(xiàn)
這篇文章主要為大家詳細介紹了如何利用Python語言模擬實現(xiàn)ATM取款機功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-09-09
Python3中延時變量和 free_list鏈表的區(qū)別解析
這篇文章主要介紹了Python3中延時變量和 free_list鏈表的區(qū)別,在Python3中,"延時變量" 和 "free_list鏈表" 是兩個不同的概念,他們之間沒有直接聯(lián)系,本文給實例相結合給大家講解的非常詳細,需要的朋友可以參考下2023-04-04
Python?torch.onnx.export用法詳細介紹
這篇文章主要給大家介紹了關于Python?torch.onnx.export用法詳細介紹的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-07-07

