Python3: 简易的 HTTP 服务器 - http.server

本文链接: https://blog.csdn.net/xietansheng/article/details/115558016

Python3 学习笔记(目录)

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

http.server模块实现了一个简单的 HTTP 服务器(Web服务器)。

http.server模块中主要涉及的几个类:

# HTTP 服务器, 主线程中处理请求
class http.server.HTTPServer(server_address, RequestHandlerClass)

# HTTP 服务器, 子线程中处理请求
class http.server.ThreadingHTTPServer(server_address, RequestHandlerClass)

# HTTP 请求处理器(请求到来时由 HTTPServer 实例化)
class http.server.BaseHTTPRequestHandler(request, client_address, server)

# 简单的 HTTP 请求处理器, 同直接运行命令: python3 -m http.server
class http.server.SimpleHTTPRequestHandler(request, client_address, server, directory=None)

简单 HTTP 服务器实现:

import http.server


class RequestHandlerImpl(http.server.BaseHTTPRequestHandler):
    """
    自定义一个 HTTP 请求处理器
    """
    
    def do_GET(self):
        """
        处理 GET 请求, 处理其他请求需实现对应的 do_XXX() 方法
        """
        # print(self.server)                # HTTPServer 实例
        # print(self.client_address)        # 客户端地址和端口: (host, port)
        # print(self.requestline)           # 请求行, 例如: "GET / HTTP/1.1"
        # print(self.command)               # 请求方法, "GET"/"POST"等
        # print(self.path)                  # 请求路径, Host 后面部分
        # print(self.headers)               # 请求头, 通过 headers["header_name"] 获取值
        # self.rfile                        # 请求输入流
        # self.wfile                        # 响应输出流

        # 1. 发送响应code
        self.send_response(200)

        # 2. 发送响应头
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()

        # 3. 发送响应内容(此处流不需要关闭)
        self.wfile.write("Hello World\n".encode("utf-8"))

    def do_POST(self):
        """
        处理 POST 请求
        """
        # 0. 获取请求Body中的内容(需要指定读取长度, 不指定会阻塞)
        req_body = self.rfile.read(int(self.headers["Content-Length"])).decode()
        print("req_body: " + req_body)

        # 1. 发送响应code
        self.send_response(200)

        # 2. 发送响应头
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()

        # 3. 发送响应内容(此处流不需要关闭)
        self.wfile.write(("Hello World: " + req_body + "\n").encode("utf-8"))


# 服务器绑定的地址和端口
server_address = ("", 8000)

# 创建一个 HTTP 服务器(Web服务器), 指定绑定的地址/端口 和 请求处理器
httpd = http.server.HTTPServer(server_address, RequestHandlerImpl)

# 循环等待客户端请求
httpd.serve_forever()

# 本地浏览器访问:      http://localhost:8000
# curl命令 GET 访问:  curl http://localhost:8000/hello/world
# curl命令 POST 访问: curl http://localhost:8000/hello/world -d "name=tom&age=25"

SimpleHTTPRequestHandler请求处理器:

import http.server

server_address = ("", 8000)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.serve_forever()

# 上面代码同直接运行命令: python3 -m http.server 8000

# 本地浏览器访问: http://localhost:8000
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢TS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值