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

南飓风  金牌会员 | 2024-9-24 21:06:23 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 878|帖子 878|积分 2634

官方文档

http.server
   警告: http.server 不推荐用于生产情况。它仅仅实现了 basic security checks 的要求。
  安装

Python3 内置尺度模块,无需安装。(在之前的 Python2 版本名称是 SimpleHTTPServer)
教程

用命令行创建

   http.server 支持以 Python 表明器的 -m 参数直接调用。
  通过执行如下命令创建一个最简朴的 HTTP 服务器:
  1. python -m http.server
复制代码
服务器默认监听端口是 8000,支持自定义端标语:
  1. python -m http.server
  2. 9000
复制代码
服务器默认绑定到全部接口,可以通过 -b/–bind 指定地点,如本田主机:
  1. python -m http.server
  2. --bind 127.0.0.1
复制代码
服务器默认工作目次为当前目次,可通过 -d/–directory 参数指定工作目次:
  1. python -m http.server
  2. --directory /tmp/
复制代码
通过在命令行传入 --cgi 参数,可以启用 CGIHTTPRequestHandler :
  1. python -m http.server
  2. --cgi
复制代码
  警告: CGIHTTPRequestHandler 和 --cgi 命令行选项不可供不受信任的客户端使用且容易受到恶意利用。 应当始终在安全的情况中使用。
  编写代码创建

   http.server 也支持在代码中调用,导入对应的类和函数即可。
  1. from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler, CGIHTTPRequestHandler
  2. import contextlib
  3. import socket
  4. import os
  5. from functools import partial
  6. import sys
  7. class DualStackServer(ThreadingHTTPServer):
  8.     def server_bind(self):
  9.         # suppress exception when protocol is IPv4
  10.         with contextlib.suppress(Exception):
  11.             self.socket.setsockopt(
  12.                 socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
  13.         return super().server_bind()
  14. def run(server_class=DualStackServer,
  15.         bind='127.0.0.1',
  16.         port=8000,
  17.         cgi=False,
  18.         directory=os.getcwd()):
  19.     if cgi:
  20.         handler_class = CGIHTTPRequestHandler
  21.     else:
  22.         handler_class = partial(SimpleHTTPRequestHandler, directory=directory)
  23.     with server_class((bind, port), handler_class) as httpd:
  24.         print(
  25.             f'Serving HTTP on {bind} port {port} '
  26.             f'(http://{bind}:{port}/) ...'
  27.         )
  28.         try:
  29.             httpd.serve_forever()
  30.         except KeyboardInterrupt:
  31.             print('\nKeyboard interrupt received, exiting.')
  32.             sys.exit(0)
  33. if __name__ == '__main__':
  34.     run()
复制代码


  • server_class:服务器类
  • handler_class:请求处置惩罚类
  • bind:IP
  • port:端口
  • cgi:是否启用 CGI 请求处置惩罚步调
  • directory:工作目次
实例

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

  • 小型 web 项目在局域网内的预览


  • 项目目次
  1. web:.
  2. ├─index.html
复制代码


  • index.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8. Hello World
  9. </body>
  10. </html>
复制代码


  • 切换到目次 cd web,执行命令 python -m http.server
    ,欣赏器地点栏输入 localhost:8000,表现:
  1. Hello World
复制代码
  对于局域网的其他用户,可通过你的主机 IP + 端标语访问,如你的主机 IP 是 192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同砚,他们也可以看到 index.html 文件渲染的内容。
  

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表