【Python】快速创建一个简易 HTTP 服务器(http.server)
引言
http.server
是 socketserver.TCPServer
的子类,它在 HTTP 套接字上创建和监听,并将请求分派给处理程序。本文是关于如何使用 Python 的 http.server
模块快速地搭建一个简易 HTTP 服务器的教程。
安装
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
启用 CGI 请求处理程序:
python -m http.server --cgi
编写代码创建
http.server 也支持在代码中调用,导入对应的类和函数即可。
from http.server import SimpleHTTPRequestHandler
from http.server import CGIHTTPRequestHandler
from http.server import ThreadingHTTPServer
from functools import partial
import contextlib
import sys
import osclass 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,handler_class=SimpleHTTPRequestHandler,port=8000,bind='127.0.0.1',cgi=False,directory=os.getcwd()):"""Run an HTTP server on port 8000 (or the port argument).Args:server_class (_type_, optional): Class of server. Defaults to DualStackServer.handler_class (_type_, optional): Class of handler. Defaults to SimpleHTTPRequestHandler.port (int, optional): Specify alternate port. Defaults to 8000.bind (str, optional): Specify alternate bind address. Defaults to '127.0.0.1'.cgi (bool, optional): Run as CGI Server. Defaults to False.directory (_type_, optional): Specify alternative directory. Defaults to os.getcwd()."""if cgi:handler_class = partial(CGIHTTPRequestHandler, directory=directory)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(port=8000, bind='127.0.0.1')
server_class
:服务器类handler_class
:请求处理类port
:端口bind
:IPcgi
:是否启用 CGI 请求处理程序directory
:工作目录
实例
既然我们已经知道了 http.server 能够快速地创建一个 HTTP 服务器,那么它能应用到哪些项目场景?
- 小型 web 项目在局域网内的预览
- 项目目录
web:.
├─index.html
- index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</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 文件渲染的内容。
- 在本地浏览器访问远程服务器的端口映射
如果通过 VSCode 连接远程服务器,使用 http.server 开启一个端口后,会自动映射到本地,这样在本地浏览器就能查看和下载远程服务器资源。(除 VSCode 外,其他工具应该也可以实现远程与本地的端口映射)
注意
http.server 只实现了最基本的安全审查,请不要用于生产环境。
参考
http.server 官方文档
插画
【画师】フカヒレ 【P站ID】78142008
【Python】快速创建一个简易 HTTP 服务器(http.server)相关推荐
- python建立一个简单的server_使用Python创建一个简易的Web Server
Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...
- 快速搭建一个简易的HTTP服务器用于文件分享与下载
需要快速搭建一个简易的HTTP服务器进行文件的分享与下载.主要有以下两种方法: 1. 使用python 来实现 import http.server import socketserverPORT = ...
- 用python快速开发一个实用的socket服务器
用python快速开发一个实用的socket服务器 - 吴尔平 - 博客园 用python快速开发一个实用的socket服务器 首先,要明白不是所有的socket服务都需要高性能.如果要求高性能,使用 ...
- PHP服务器脚本实例,Shell脚本实现的一个简易Web服务器例子分享_linux shell
这篇文章主要介绍了Shell脚本实现的一个简易Web服务器例子分享,本文实现的Web服务器非常简单实用,可以在你不想安装nginx.apache等大型WEB服务器时使用,需要的朋友可以参考下 假设你想 ...
- 如何在 Python 中创建一个简单的神经网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...
- python9行代码_如何用9行Python代码编写一个简易神经网络
原标题:如何用9行Python代码编写一个简易神经网络 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 学习人工智能时,我给自己定了一个目标--用Pyth ...
- 基于 Spring Boot 2.x 使用 Activiti 创建一个简易的请假流程
文章目录 1 摘要 2 准备工作 3 请假流程图 3 核心代码 3.1 数据库表 3.2 流程管理工具类 3.3 流程的使用 4 推荐参考资料 5 Github 源码 1 摘要 工作流是需 ...
- centos创建文件服务器,创建一个centos云服务器
创建一个centos云服务器 内容精选 换一换 在不使用华为云容器产品的情况下,支持用户在华为云弹性云服务器中部署容器,并实现同一个子网中不同弹性云服务器内的容器相互通信.云服务器内部署容器,容器地址 ...
- 关于Maven中的常见命令,通过命令的方式快速创建一个空的maven工程,将jar包打到maven仓库中
打jar包的方式 mvn package -Dmaven.test.skip=true mvn install -Dmaven.test.skip=true mvn compile -Dmave ...
最新文章
- Linux文件压缩与解压缩
- C++新旧类型转换小记
- 判断两个矩形相交以及求出相交的区域
- win+mysql自动备份吗_Windows下mysql自动备份的最佳方案
- VMware三种链接方式
- 函数 strncpy、strncat、strncmp、strrchr 的实现
- ios app 提交评审注意事项
- koreader下载_Koreader —— Kindle 的 PDF 文档重排插件
- 韩昊 20190919-5 代码规范,结对
- 雅猴的脚印——2019年上半年
- 判断是否是正确的EMAIL格式
- CARLA 笔记(07)— 地图和导航(Landmarks、Waypoints、Lanes、Junctions、Environment Objects、路径点导航、地图导航、分层和非分层地图)
- java方法和数组的概念及法
- 算法模板:归并排序【沈七】
- 解决rdm连接虚拟机redis失败,idea无法连接
- 奥维地图导入西安坐标_奥维互动地图导入d f文件说明
- 输入10个数,将最大的数字输出;
- 【IoT】 产品设计:微信小程序如何适配不同机型
- python 中文转Unicode编码 Unicode编码转中文的四种方法
- 具有Hilt的Android上的依赖注入