南飓风 发表于 2024-9-24 21:06:23

【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 sys


class DualStackServer(ThreadingHTTPServer):
    def server_bind(self):
      # suppress exception when protocol is IPv4
      with 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 = CGIHTTPRequestHandler
    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()



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

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

[*]小型 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 文件渲染的内容。

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Python】快速创建一个浅易 HTTP 服务器(http.server)