【Python】快速创建一个简易 HTTP 服务器(http.server)
创始人
2024-09-25 22:49:01

目录

  • 官方文档
  • 安装
  • 教程
    • 用命令行创建
    • 编写代码创建
  • 实例

官方文档

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()  
  • server_class:服务器类
  • handler_class:请求处理类
  • bind:IP
  • port:端口
  • cgi:是否启用 CGI 请求处理程序
  • directory:工作目录

实例

既然我们已经知道了 http.server 能够快速地创建一个 HTTP 服务器,那么它能应用到哪些项目场景?

  1. 小型 web 项目在局域网内的预览
  • 项目目录
web:. ├─index.html 
  • 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 文件渲染的内容。

  1. 在本地浏览器访问远程服务器的端口映射

如果通过 VSCode 连接远程服务器,使用 http.server 开启一个端口后,会自动映射到本地,这样在本地浏览器就能查看和下载远程服务器资源。(除 VSCode 外,其他工具应该也可以实现远程与本地的端口映射)

相关内容

热门资讯

无人机测燃气、机器狗3D建模,... 齐鲁晚报·齐鲁壹点记者 王皇 孟杰 摄影记者 王鑫 12月9日,山东省智能建造工作会在济南举行,同期...
高区新增机器人专业技术人员考核... 近日,工业和信息化部教育与考试中心依据人力资源社会保障部《专业技术人才知识更新工程数字技术工程师培育...
手机磁吸补光灯精品定制与靠谱供... 在当今数字化时代,摄影和直播行业蓬勃发展,手机磁吸补光灯作为一种便捷且实用的照明工具,正逐渐成为众多...
ETF午评 | A股低开高走,... 格隆汇12月12日|A股低开高走,截至午盘,上证指数跌0.04%,深证成指涨0.57%,指涨0.6%...
抛光用白刚玉微粉的特性 抛光用白刚玉微粉具有高硬度、化学稳定性强、粒度分布均匀、耐磨性优异、自锐性好、耐高温、环保安全、适用...