使用`http.server`模块搭建简单HTTP服务器

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 使用`http.server`模块搭建简单HTTP服务器

1. 使用http.server模块搭建简单HTTP服务器

代码示例

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("Serving at port", PORT)
    httpd.serve_forever()

解释

  • 导入模块:首先,我们导入了http.serversocketserver模块。http.server模块提供了HTTP服务器相关的类和函数,而socketserver模块则提供了更底层的套接字服务器功能。
  • 定义端口:我们设置了一个常量PORT,用于指定HTTP服务器监听的端口号(在这个例子中是8000)。
  • 指定处理器:我们使用http.server.SimpleHTTPRequestHandler作为HTTP请求的处理程序。这个类已经实现了基本的HTTP请求处理逻辑,包括GET、HEAD等请求方法。
  • 创建服务器:我们使用socketserver.TCPServer类创建一个TCP服务器实例。这个类的第一个参数是一个元组,表示服务器的地址和端口号(在这个例子中,我们使用空字符串表示监听所有可用的网络接口)。第二个参数是请求处理程序类,即我们之前指定的Handler
  • 启动服务器:我们使用with语句来创建并启动服务器。这样,当with语句块结束时,服务器会自动关闭。在with语句块内部,我们调用httpd.serve_forever()方法来启动服务器,使其持续监听并处理请求。

2. 扩展BaseHTTPRequestHandler创建自定义HTTP服务器

虽然直接使用http.server.SimpleHTTPRequestHandler可以很方便地搭建一个简单的HTTP服务器,但如果你需要实现更复杂的逻辑或自定义的HTTP请求处理方法,你可能需要扩展BaseHTTPRequestHandler类。

代码示例

import http.server
from http.server import BaseHTTPRequestHandler, HTTPServer

class CustomHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 发送响应头
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        # 发送响应体
        message = "<html><body><h1>Hello, World!</h1></body></html>"
        self.wfile.write(message.encode('utf-8'))
        return

def run_server():
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, CustomHTTPRequestHandler)
    print('Starting up server on port 8000...')
    httpd.serve_forever()

if __name__ == '__main__':
    run_server()

解释

  • 导入模块和类:除了导入http.server模块外,我们还从http.server模块中导入了BaseHTTPRequestHandlerHTTPServer类。
  • 定义自定义请求处理程序:我们创建了一个名为CustomHTTPRequestHandler的类,它继承自BaseHTTPRequestHandler。在这个类中,我们重写了do_GET方法,用于处理GET请求。在do_GET方法中,我们首先发送响应头(包括状态码和内容类型),然后发送响应体(一个包含HTML内容的字符串)。注意,在发送响应体之前,我们需要将字符串编码为字节流(在这个例子中,我们使用UTF-8编码)。
  • 创建并启动服务器:在run_server函数中,我们指定了服务器的地址和端口号(与之前的示例相同),并创建了一个HTTPServer实例。这个实例使用我们自定义的CustomHTTPRequestHandler类作为请求处理程序。然后,我们调用httpd.serve_forever()方法来启动服务器。
  • 主程序入口:在脚本的最后部分,我们检查是否作为主程序运行(而不是被导入为模块)。如果是主程序运行,则调用run_server函数来启动服务器。

3. 深入解释(扩展部分)

由于直接要求300
处理结果:

1. 使用http.server模块搭建简单HTTP服务器

代码示例

```python
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd_
print("Serving at port", PORT)
httpd.serve_forever()

  • 导入模块:首先,我们导入了http.serversocketserver模块。http.server模块提供了HTTP服务器相关的类和函数,而socketserver模块则提供了更底层的套接字服务器功能。

    2. 扩展BaseHTTPRequestHandler创建自定义HTTP服务器

    虽然直接使用http.server.SimpleHTTPRequestHandler可以很方便地搭建一个简单的HTTP服务器,但如果你需要实现更复杂的逻辑或自定义的HTTP请求处理方法,你可能需要扩展BaseHTTPRequestHandler类。

    代码示例

    ```python
    class CustomHTTPRequestHandler(BaseHTTPRequestHandler)_
    def doGET(self)

    发送响应头

    self.send_response(200)
    self.send_header('Content-type', 'text_html')
    self.end_headers()

    发送响应体

    message = "

Hello, World!<_h1><_body><_html>"
self.wfile.write(message.encode('utf-8'))
return
def runserver()
server_address = ('', 8000)
httpd = HTTPServer(server_address, CustomHTTPRequestHandler)
print('Starting up server on port 8000...')
httpd.serveforever()
if name == 'main'

run_server()

  • 导入模块和类:除了导入http.server模块外,我们还从http.server模块中导入了BaseHTTPRequestHandlerHTTPServer类。
  • 相关文章
    |
    23天前
    |
    缓存 负载均衡 监控
    HTTP代理服务器在网络安全中的重要性
    随着科技和互联网的发展,HTTP代理IP中的代理服务器在企业业务中扮演重要角色。其主要作用包括:保护用户信息、访问控制、缓存内容、负载均衡、日志记录和协议转换,从而在网络管理、性能优化和安全性方面发挥关键作用。
    59 2
    |
    3月前
    |
    缓存 JavaScript 安全
    nodejs里面的http模块介绍和使用
    综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
    136 62
    |
    3月前
    使用Netty实现文件传输的HTTP服务器和客户端
    本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
    94 1
    使用Netty实现文件传输的HTTP服务器和客户端
    |
    2月前
    |
    存储 Oracle 关系型数据库
    oracle服务器存储过程中调用http
    通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
    97 0
    |
    3月前
    |
    JSON API 开发者
    深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
    深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
    30 0
    |
    3月前
    |
    移动开发 网络协议 C语言
    详解 httptools 模块,一个 HTTP 解析器
    详解 httptools 模块,一个 HTTP 解析器
    55 0
    |
    4月前
    |
    开发者
    HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
    HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
    55 1
    |
    1天前
    |
    弹性计算 数据挖掘 应用服务中间件
    阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
    目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
    118 84
    |
    11天前
    |
    机器学习/深度学习 人工智能 PyTorch
    阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
    阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
    阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
    |
    10天前
    |
    存储 运维 安全
    阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
    阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。