Python中的http.server库用法详细介绍
|
前言
http.server 是 Python 标准库中的一个模块,用于创建基本的 HTTP 服务器。这个模块非常适合用于开发、测试、以及在本地网络中共享文件。以下是对 http.server 模块的详细介绍。
Python 官方文档:http.server — HTTP 服务器
模块概述
提供了基本的 HTTP 请求处理功能,它包含了以下几个核心类和方法:
- http.server.BaseHTTPRequestHandler:这是所有请求处理类的基类,提供了处理 HTTP 请求的基本框架。它定义了处理 HTTP 请求的方法(如 do_GET、do_POST 等),这些方法需要在子类中被实现或重写。
- http.server.SimpleHTTPRequestHandler:这是 BaseHTTPRequestHandler 的一个子类,专门用于处理简单的 GET 和 HEAD 请求。它可以直接用于服务文件系统中的文件,支持简单的文件目录浏览。
- http.server.CGIHTTPRequestHandler:这是 SimpleHTTPRequestHandler 的一个子类,支持 CGI 脚本的执行。它允许通过服务器运行 CGI 脚本,适用于简单的动态网页服务器。
- http.server.HTTPServer:这是一个具体的 HTTP 服务器类,基于 socketserver.TCPServer 实现。它用于处理客户端的请求并生成响应。
- http.server.ThreadingHTTPServer:这是 HTTPServer 的多线程版本,每个请求都会由一个单独的线程来处理。
基本用法
以下是如何使用 http.server 模块的基本示例:
1. 启动一个简单的 HTTP 服务器
在命令行中,快速启动一个 HTTP 服务器来服务当前目录中的文件:- python -m http.server 8000
复制代码 这将在当前目录下启动一个 HTTP 服务器,监听端口 8000。
2. 使用 Python 代码启动服务器
- from http.server import SimpleHTTPRequestHandler, HTTPServer
- # 设置服务器地址和端口
- server_address = ('', 8000)
- # 创建服务器对象
- httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
- # 启动服务器
- print("Serving on port 8000...")
- httpd.serve_forever()
复制代码 这段代码启动了一个 HTTP 服务器,并在 localhost 的 8000 端口上监听。
3. 自定义请求处理程序
通过继承,你可以自定义服务器对特定请求的响应:- 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()
- # 创建服务器对象
- httpd = HTTPServer(('', 8000), MyRequestHandler)
- # 启动服务器
- print("Serving on port 8000...")
- httpd.serve_forever()
复制代码 4. CGI 支持
使用运行支持 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,但可以通过 ssl 模块添加 HTTPS 支持:- from http.server import SimpleHTTPRequestHandler, HTTPServer
- import ssl
- # 创建服务器对象
- 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):发送 HTTP 响应代码和可选的消息。
- send_header(self, keyword, value):发送 HTTP 标头。
- end_headers(self):发送 HTTP 响应的结束标记。
- log_message(self, format, *args):记录服务器日志信息。
优缺点
优点:
- 简单易用:非常适合开发和测试阶段。
- 内置于Python标准库:不需要安装任何额外的依赖。
- 轻量级:启动速度快,适合小型任务。
缺点:
- 功能有限:不适合用于生产环境,缺乏复杂的认证、日志记录和错误处理机制。
- 性能瓶颈:由于是单线程(除非使用 ThreadingHTTPServer),在高并发情况下性能较差。
总结
是一个非常有用的工具,可以快速搭建一个基本的 HTTP 服务器,尤其是在开发和测试阶段。但它并不适合作为生产环境的服务器。如果你需要更强大的功能和性能,建议使用专门的 Web 框架或服务器软件,如 Flask、Django、或者 Nginx、Apache 等。
来源:https://www.jb51.net/python/331203xfb.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2024-11-25 07:53:08
举报
回复
分享
|
|
|
|