当前位置: 首页 > news >正文

【Python】快速创建一个简易 HTTP 服务器(http.server)

目录

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

官方文档

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 sysclass DualStackServer(ThreadingHTTPServer):def server_bind(self):# suppress exception when protocol is IPv4with 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 = CGIHTTPRequestHandlerelse: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
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
Hello World
</body>
</html>
  • 切换到目录 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 外,其他工具应该也可以实现远程与本地的端口映射)

http://www.lryc.cn/news/408835.html

相关文章:

  • 随着软件开发方法的不断演进,Cobol 程序如何适应敏捷开发和持续集成/持续部署(CI/CD)的流程?
  • nodejs - MongoDB 学习笔记
  • photoshop学习笔记——移动工具
  • HarmonyOS 质量、测试、上架速浏
  • TS的访问修饰符有哪些
  • 网络安全之扫描探测阶段攻防手段(二)
  • C++:泛型算法了解
  • 基于bert的自动对对联系统
  • js-vue中多个按钮状态选中类似于复选框与单选框实现
  • ObservableCollection新增数据前判断数据是否存在
  • DBus快速入门
  • SQL Server 设置端口号:详细步骤与注意事项
  • Python面试题:结合Python技术,如何使用NetworkX进行复杂网络分析
  • 【C#/C++】C#调C++的接口,给C++传结构体数组
  • ctfshow SSTI注入 web369--web372
  • Llama + Dify,在你的电脑搭建一套AI工作流
  • 洛谷 P9854 [CCC 2008 J1] Body Mass Index
  • Redis面试三道题目
  • redis的使用场景-分布式锁
  • 知识库系统全解析:2024年最佳9款
  • 猫头虎分享:Numpy知识点一文带你详细学习np.random.randn()
  • QT 关于QTableWidget的常规使用
  • PyCharm 常用 的插件
  • 理解 HTTP 请求中 Query 和 Body 的异同
  • 【AI大模型】 企业级向量数据库的选择与实战
  • LangChain开发框架并学会对大型预训练模型进行微调(fine-tuning)
  • VMware安装(有的时候启动就蓝屏建议换VM版本)
  • AV1技术学习:Quantization
  • vllm部署记录
  • HTML前端 盒模型及常见的布局 流式布局 弹性布局 网格布局