Python 的 http.server
库是一个内置的标准库,提供了一个简单的 HTTP 服务器功能,方便开发者进行快速的 Web 界面测试、文件分享和本地开发等任务。这个库可以在任何支持Python的操作系统上运行,适合于快速搭建测试环境。
基本用法
在 Python 3 中,http.server
模块包含了一个基本的 HTTP 服务器,开发者只需几行代码即可启动服务。下面是一个最简单的例子:
from http.server import SimpleHTTPRequestHandler, HTTPServer
# 定义服务器的主机和端口
host = 'localhost'
port = 8000
# 创建一个 HTTP 服务器
with HTTPServer((host, port), SimpleHTTPRequestHandler) as server:
print(f"Serving on http://{host}:{port}")
server.serve_forever() # 启动服务器
上述代码将创建一个在 localhost:8000
上运行的 HTTP 服务器,可以用于提供当前目录下的文件和文件夹。
处理 GET 请求
http.server
模块允许我们处理 HTTP 请求。我们可以通过继承 SimpleHTTPRequestHandler
类并重写其 do_GET
方法来自定义处理 GET 请求的行为。下面是一个例子:
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# 设置响应状态码
self.send_response(200)
# 设置响应头
self.send_header('Content-type', 'text/html')
self.end_headers()
# 响应内容
self.wfile.write(b"<html><body><h1>Hello, World!</h1></body></html>")
# 定义服务器的主机和端口
host = 'localhost'
port = 8000
with HTTPServer((host, port), MyRequestHandler) as server:
print(f"Serving on http://{host}:{port}")
server.serve_forever()
在这个例子中,我们创建了一个继承自 BaseHTTPRequestHandler
的类 MyRequestHandler
,并重写了 do_GET
方法。当有人请求该服务器时,返回一个简单的 HTML 页面,显示“Hello, World!”信息。
处理 POST 请求
除了处理 GET 请求,我们还可以处理 POST 请求。以下是一个处理 POST 请求的示例:
from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
class MyPostRequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
# 获取请求长度
content_length = int(self.headers['Content-Length'])
# 读取请求数据
post_data = self.rfile.read(content_length)
# 解析数据
parsed_data = urllib.parse.parse_qs(post_data.decode('utf-8'))
# 设置响应状态码和头部
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
# 返回处理结果
response = f"<html><body><h1>Received POST data:</h1><pre>{parsed_data}</pre></body></html>"
self.wfile.write(response.encode('utf-8'))
# 定义服务器的主机和端口
host = 'localhost'
port = 8000
with HTTPServer((host, port), MyPostRequestHandler) as server:
print(f"Serving on http://{host}:{port}")
server.serve_forever()
在此示例中,我们重写了 do_POST
方法,读取并解析 POST 请求中的数据,然后将其返回给客户端。
总结
http.server
模块十分方便,可以轻松地用于开发和测试。在实际开发中,http.server
不适合用作生产服务器,但它为开发者提供了一个快速的解决方案,让他们能够迅速搭建协议和应用程序。在实际应用场景中,可以使用这个工具来测试 API,或者作为静态文件服务器,进行本地开发时的快速文件共享。通过自定义请求处理,开发者能够在本地环境中模拟更加复杂的请求和响应逻辑,为后续的开发和测试提供便利。