Python非常容易通過標準庫的http
模組來創建一個HTTP伺服器。
特別是,我們將使用http.server
對象。
首先,我要提及一種在任意文件夾中運行HTTP伺服器的快速方法,而不需要編寫任何代碼:
python -m http.server --cgi 8000
這將在8000端口上運行一個HTTP伺服器,提供當前文件夾中的文件。當然,這不是一個像Nginx或Apache那樣功能完整的HTTP伺服器,但對於原型或自己的測試項目往往已經足夠。
現在讓我們在我們的代碼中使用該模塊,以便以編程方式向連接到8000端口的任何人提供“Hello, World!”字符串:
from http.server import BaseHTTPRequestHandler, HTTPServer
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "Hello, World!"
self.wfile.write(bytes(message, "utf8"))
with HTTPServer(('', 8000), handler) as server:
server.serve_forever()
在本地運行此程序後,您可以使用網絡瀏覽器連接到端口http://localhost:8000 。
此代碼將向訪問網站http://localhost:8000的任何人提供相同的“Hello, World!”字符串,無論其請求的URL是什麼,並返回200響應和“Content-type:text/html”標頭。
我們將數據寫入wfile
,其中包含將響應返回給客戶端的輸出流。
這僅對GET請求起作用,因為我們實現了處理器的do_GET
方法。
您還可以實現do_HEAD()
、do_POST()
和任何其他HTTP方法:
from http.server import BaseHTTPRequestHandler, HTTPServer
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "Hello, World! Here is a GET response"
self.wfile.write(bytes(message, "utf8"))
def do_POST(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "Hello, World! Here is a POST response"
self.wfile.write(bytes(message, "utf8"))
with HTTPServer(('', 8000), handler) as server:
server.serve_forever()
Python有很多不同的庫可以用來處理基於Web伺服器的應用程序,包括非常受歡迎的Flask和Django。