ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Python】快速创建一个浅易 HTTP 服务器(http.server) [打印本页]

作者: 南飓风    时间: 2024-9-24 21:06
标题: 【Python】快速创建一个浅易 HTTP 服务器(http.server)
官方文档

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()
复制代码

实例

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

  1. web:.
  2. ├─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>
复制代码

  1. Hello World
复制代码
  对于局域网的其他用户,可通过你的主机 IP + 端标语访问,如你的主机 IP 是 192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同砚,他们也可以看到 index.html 文件渲染的内容。
   如果通过 VSCode 连接长途服务器,使用 http.server 开启一个端口后,会自动映射到当地,这样在当地欣赏器就能查看和下载长途服务器资源。(除 VSCode 外,其他工具应该也可以实现长途与当地的端口映射)

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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4