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。