引言

http.serversocketserver.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:IP
  • cgi:是否启用 CGI 请求处理程序
  • directory:工作目录

实例

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

  1. 小型 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 文件渲染的内容。

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

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

注意

http.server 只实现了最基本的安全审查,请不要用于生产环境。

参考

http.server 官方文档

插画

【画师】フカヒレ 【P站ID】78142008

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

  1. python建立一个简单的server_使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  2. 快速搭建一个简易的HTTP服务器用于文件分享与下载

    需要快速搭建一个简易的HTTP服务器进行文件的分享与下载.主要有以下两种方法: 1. 使用python 来实现 import http.server import socketserverPORT = ...

  3. 用python快速开发一个实用的socket服务器

    用python快速开发一个实用的socket服务器 - 吴尔平 - 博客园 用python快速开发一个实用的socket服务器 首先,要明白不是所有的socket服务都需要高性能.如果要求高性能,使用 ...

  4. PHP服务器脚本实例,Shell脚本实现的一个简易Web服务器例子分享_linux shell

    这篇文章主要介绍了Shell脚本实现的一个简易Web服务器例子分享,本文实现的Web服务器非常简单实用,可以在你不想安装nginx.apache等大型WEB服务器时使用,需要的朋友可以参考下 假设你想 ...

  5. 如何在 Python 中创建一个简单的神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...

  6. python9行代码_如何用9行Python代码编写一个简易神经网络

    原标题:如何用9行Python代码编写一个简易神经网络 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 学习人工智能时,我给自己定了一个目标--用Pyth ...

  7. 基于 Spring Boot 2.x 使用 Activiti 创建一个简易的请假流程

    文章目录 1 摘要 2 准备工作 3 请假流程图 3 核心代码 3.1 数据库表 3.2 流程管理工具类 3.3 流程的使用 4 推荐参考资料 5 Github 源码 ​ ​ ​ 1 摘要 工作流是需 ...

  8. centos创建文件服务器,创建一个centos云服务器

    创建一个centos云服务器 内容精选 换一换 在不使用华为云容器产品的情况下,支持用户在华为云弹性云服务器中部署容器,并实现同一个子网中不同弹性云服务器内的容器相互通信.云服务器内部署容器,容器地址 ...

  9. 关于Maven中的常见命令,通过命令的方式快速创建一个空的maven工程,将jar包打到maven仓库中

    打jar包的方式  mvn package -Dmaven.test.skip=true mvn install -Dmaven.test.skip=true mvn compile -Dmave ...

最新文章

  1. Linux文件压缩与解压缩
  2. C++新旧类型转换小记
  3. 判断两个矩形相交以及求出相交的区域
  4. win+mysql自动备份吗_Windows下mysql自动备份的最佳方案
  5. VMware三种链接方式
  6. 函数 strncpy、strncat、strncmp、strrchr 的实现
  7. ios app 提交评审注意事项
  8. koreader下载_Koreader —— Kindle 的 PDF 文档重排插件
  9. 韩昊 20190919-5 代码规范,结对
  10. 雅猴的脚印——2019年上半年
  11. 判断是否是正确的EMAIL格式
  12. CARLA 笔记(07)— 地图和导航(Landmarks、Waypoints、Lanes、Junctions、Environment Objects、路径点导航、地图导航、分层和非分层地图)
  13. java方法和数组的概念及法
  14. 算法模板:归并排序【沈七】
  15. 解决rdm连接虚拟机redis失败,idea无法连接
  16. 奥维地图导入西安坐标_奥维互动地图导入d f文件说明
  17. 输入10个数,将最大的数字输出;
  18. 【IoT】 产品设计:微信小程序如何适配不同机型
  19. python 中文转Unicode编码 Unicode编码转中文的四种方法
  20. 具有Hilt的Android上的依赖注入

热门文章

  1. Comparable和Comparator两接口的区别
  2. mysql查询职位大于3_Mysql查询语句
  3. LeetCode动态规划股票系列整理
  4. TCC-Transaction原理
  5. Python的Scrapy框架爬取诗词网站爱情诗送给女友
  6. android 入门作品之 特价淘宝客-生活查询助手1.0- 微课堂
  7. 使用QT制作简单的GIF
  8. JVM原理(一)JVM通识、JVM架构
  9. 女孩顶球-第10届蓝桥杯Scratch省赛真题第1题
  10. 隐私无忧,多御浏览器者通过这些功能保护用户隐私