http.server
警告: http.server 不推荐用于生产环境。它仅仅实现了 basic security checks 的要求。
Python3 内置标准模块,无需安装。(在之前的 Python2 版本名称是 SimpleHTTPServer)
http.server 支持以 Python 解释器的 -m 参数直接调用。
通过执行如下命令创建一个最简单的 HTTP 服务器:
python -m http.server
服务器默认监听端口是 8000,支持自定义端口号:
python -m http.server 9000
服务器默认绑定到所有接口,可以通过 -b/–bind 指定地址,如本地主机:
python -m http.server --bind 127.0.0.1
服务器默认工作目录为当前目录,可通过 -d/–directory 参数指定工作目录:
python -m http.server --directory /tmp/
通过在命令行传入 --cgi 参数,可以启用 CGIHTTPRequestHandler :
python -m http.server --cgi
警告: CGIHTTPRequestHandler 和 --cgi 命令行选项不可供不受信任的客户端使用且容易受到恶意利用。 应当始终在安全的环境中使用。
http.server 也支持在代码中调用,导入对应的类和函数即可。
from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler, CGIHTTPRequestHandler import contextlib import socket import os from functools import partial import sys class DualStackServer(ThreadingHTTPServer): def server_bind(self): # suppress exception when protocol is IPv4 with contextlib.suppress(Exception): self.socket.setsockopt( socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) return super().server_bind() def run(server_class=DualStackServer, bind='127.0.0.1', port=8000, cgi=False, directory=os.getcwd()): if cgi: handler_class = CGIHTTPRequestHandler else: handler_class = partial(SimpleHTTPRequestHandler, directory=directory) with server_class((bind, port), handler_class) as httpd: print( f'Serving HTTP on {bind} port {port} ' f'(http://{bind}:{port}/) ...' ) try: httpd.serve_forever() except KeyboardInterrupt: print('\nKeyboard interrupt received, exiting.') sys.exit(0) if __name__ == '__main__': run()
既然我们已经知道了 http.server 能够快速地创建一个 HTTP 服务器,那么它能应用到哪些项目场景?
web:. ├─index.html
Title Hello World
cd web
,执行命令 python -m http.server
,浏览器地址栏输入 localhost:8000
,显示:Hello World
对于局域网的其他用户,可通过你的主机 IP + 端口号访问,如你的主机 IP 是 192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同学,他们也可以看到 index.html 文件渲染的内容。
如果通过 VSCode 连接远程服务器,使用 http.server 开启一个端口后,会自动映射到本地,这样在本地浏览器就能查看和下载远程服务器资源。(除 VSCode 外,其他工具应该也可以实现远程与本地的端口映射)
上一篇:达梦数据库配置文件参数说明