Python中的SimpleHTTPRequestHandler类及其作用
SimpleHTTPRequestHandler 类是 Python 内置的一个 HTTP 服务器类。它可以用于创建简单的文件服务器,提供文件的静态访问和下载功能。
SimpleHTTPRequestHandler 类继承自 BaseHTTPRequestHandler 类,它实现了基本的 GET 和 HEAD 请求的处理。在使用 SimpleHTTPRequestHandler 类时,只需要实现 do_GET 方法即可。
以下是 SimpleHTTPRequestHandler 类的一些常用方法和属性:
- do_GET(): 处理 GET 请求的方法。默认实现会根据请求的路径返回相应的文件内容。
- do_HEAD(): 处理 HEAD 请求的方法。默认实现会返回响应头部,并不会返回实际的文件内容。
- send_response(): 发送响应状态行和响应头部的方法。
- send_header(): 发送响应头部的方法。
- end_headers(): 结束响应头部的方法。
- send_file(): 发送文件内容的方法。
下面是一个使用 SimpleHTTPRequestHandler 类创建简单文件服务器的例子:
from http.server import HTTPServer, SimpleHTTPRequestHandler
# 创建文件服务器的主机和端口
host = 'localhost'
port = 8000
# 创建 HTTP 服务器对象,指定请求处理类为 SimpleHTTPRequestHandler
server = HTTPServer((host, port), SimpleHTTPRequestHandler)
# 启动 HTTP 服务器
print(f'Starting file server on {host}:{port}...')
server.serve_forever()
上面的代码创建了一个监听在 localhost:8000 的文件服务器,并使用 SimpleHTTPRequestHandler 类来处理请求。
在命令行中执行该脚本后,就可以在浏览器中访问 http://localhost:8000 来访问服务器上的文件了。比如,如果当前目录下有一个名为 index.html 的文件,那么可以在浏览器中输入 http://localhost:8000/index.html 来访问该文件。
除了静态文件服务器之外,SimpleHTTPRequestHandler 类还可以自定义处理 GET 请求的方式。可以通过继承 SimpleHTTPRequestHandler 类,然后实现自定义的 do_GET 方法来实现。
以下是一个自定义处理 GET 请求的例子:
from http.server import HTTPServer, SimpleHTTPRequestHandler
class MyHandler(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"<h1>Hello, World!</h1>")
else:
super().do_GET()
# 创建文件服务器的主机和端口
host = 'localhost'
port = 8000
# 创建 HTTP 服务器对象,指定请求处理类为 MyHandler
server = HTTPServer((host, port), MyHandler)
# 启动 HTTP 服务器
print(f'Starting file server on {host}:{port}...')
server.serve_forever()
上面的代码创建了一个监听在 localhost:8000 的文件服务器,并添加了自定义的处理 GET 请求的逻辑。
当访问 http://localhost:8000/hello 时,服务器会响应一个包含 "Hello, World!" 的网页。而其他路径仍然会根据默认逻辑返回对应的文件内容。
