文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-28 21:53

关注

在这里插入图片描述

引言

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 SimpleHTTPRequestHandlerfrom http.server import CGIHTTPRequestHandlerfrom http.server import ThreadingHTTPServerfrom functools import partialimport contextlibimport sysimport osclass 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,        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')

实例

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

  1. 小型 web 项目在局域网内的预览
web:.├─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>Documenttitle>head><body>    hello worldbody>html>
hello world

对于局域网的其他用户,可通过你的主机IP+端口号访问,如你的主机IP是192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同学,他们也可以看到 index.html 文件渲染的内容。

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

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

注意

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

参考

http.server 官方文档

插画

cover

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

来源地址:https://blog.csdn.net/qq_42951560/article/details/124218348

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯