当前位置: 代码网 > it编程>前端脚本>Python > Python中的http.server库用法详细介绍

Python中的http.server库用法详细介绍

2024年11月25日 Python 我要评论
前言http.server 是 python 标准库中的一个模块,用于创建基本的 http 服务器。这个模块非常适合用于开发、测试、以及在本地网络中共享文件。以下是对 http.server 模块的详

前言

http.server 是 python 标准库中的一个模块,用于创建基本的 http 服务器。这个模块非常适合用于开发、测试、以及在本地网络中共享文件。以下是对 http.server 模块的详细介绍。

python 官方文档:http.server — http 服务器

模块概述

http.server 提供了基本的 http 请求处理功能,它包含了以下几个核心类和方法:

  • http.server.basehttprequesthandler:这是所有请求处理类的基类,提供了处理 http 请求的基本框架。它定义了处理 http 请求的方法(如 do_get、do_post 等),这些方法需要在子类中被实现或重写。

  • http.server.simplehttprequesthandler:这是 basehttprequesthandler 的一个子类,专门用于处理简单的 get 和 head 请求。它可以直接用于服务文件系统中的文件,支持简单的文件目录浏览。

  • http.server.cgihttprequesthandler:这是 simplehttprequesthandler 的一个子类,支持 cgi 脚本的执行。它允许通过服务器运行 cgi 脚本,适用于简单的动态网页服务器。

  • http.server.httpserver:这是一个具体的 http 服务器类,基于 socketserver.tcpserver 实现。它用于处理客户端的请求并生成响应。

  • http.server.threadinghttpserver:这是 httpserver 的多线程版本,每个请求都会由一个单独的线程来处理。

基本用法

以下是如何使用 http.server 模块的基本示例:

1. 启动一个简单的 http 服务器

在命令行中,快速启动一个 http 服务器来服务当前目录中的文件:

python -m http.server 8000

这将在当前目录下启动一个 http 服务器,监听端口 8000。

2. 使用 python 代码启动服务器

from http.server import simplehttprequesthandler, httpserver

# 设置服务器地址和端口
server_address = ('', 8000)

# 创建服务器对象
httpd = httpserver(server_address, simplehttprequesthandler)

# 启动服务器
print("serving on port 8000...")
httpd.serve_forever()

这段代码启动了一个 http 服务器,并在 localhost 的 8000 端口上监听。

3. 自定义请求处理程序

通过继承 simplehttprequesthandler,你可以自定义服务器对特定请求的响应:

from http.server import simplehttprequesthandler, httpserver

class myrequesthandler(simplehttprequesthandler):
    def do_get(self):
        if self.path == '/hello':
            self.send_response(200)
            self.send_header("content-type", "text/html")
            self.end_headers()
            self.wfile.write(b"hello, world!")
        else:
            super().do_get()

# 创建服务器对象
httpd = httpserver(('', 8000), myrequesthandler)

# 启动服务器
print("serving on port 8000...")
httpd.serve_forever()

4. cgi 支持

使用 cgihttprequesthandler 运行支持 cgi 脚本的服务器:

from http.server import httpserver, cgihttprequesthandler

# 设置服务器地址和端口
server_address = ('', 8000)

# 启用cgi处理程序
httpd = httpserver(server_address, cgihttprequesthandler)

# 启动服务器
print("serving on port 8000 with cgi support...")
httpd.serve_forever()

cgi 处理程序允许你在服务器上运行诸如 python 脚本等 cgi 程序。

5. 启用 https 支持

虽然 http.server 默认只支持 http,但可以通过 ssl 模块添加 https 支持:

from http.server import simplehttprequesthandler, httpserver
import ssl

# 创建服务器对象
httpd = httpserver(('', 8000), simplehttprequesthandler)

# 添加ssl/tls层
httpd.socket = ssl.wrap_socket(httpd.socket,
                               keyfile="path/to/key.pem",
                               certfile='path/to/cert.pem',
                               server_side=true)

# 启动服务器
print("serving on https://localhost:8000...")
httpd.serve_forever()

关键方法和属性

  • do_get(self):处理 get 请求。子类可以重写此方法以自定义处理逻辑。
  • do_post(self):处理 post 请求。子类可以重写此方法。
  • send_response(self, code, message=none):发送 http 响应代码和可选的消息。
  • send_header(self, keyword, value):发送 http 标头。
  • end_headers(self):发送 http 响应的结束标记。
  • log_message(self, format, *args):记录服务器日志信息。

优缺点

优点:

  • 简单易用:非常适合开发和测试阶段。
  • 内置于python标准库:不需要安装任何额外的依赖。
  • 轻量级:启动速度快,适合小型任务。

缺点:

  • 功能有限:不适合用于生产环境,缺乏复杂的认证、日志记录和错误处理机制。
  • 性能瓶颈:由于是单线程(除非使用 threadinghttpserver),在高并发情况下性能较差。

总结

http.server 是一个非常有用的工具,可以快速搭建一个基本的 http 服务器,尤其是在开发和测试阶段。但它并不适合作为生产环境的服务器。如果你需要更强大的功能和性能,建议使用专门的 web 框架或服务器软件,如 flask、django、或者 nginx、apache 等。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com