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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓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类。
  • 相关文章
    |
    1月前
    |
    缓存 JavaScript 安全
    nodejs里面的http模块介绍和使用
    综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
    101 62
    |
    1月前
    使用Netty实现文件传输的HTTP服务器和客户端
    本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
    38 1
    使用Netty实现文件传输的HTTP服务器和客户端
    |
    14天前
    |
    存储 Oracle 关系型数据库
    oracle服务器存储过程中调用http
    通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
    15 0
    |
    1月前
    |
    JSON API 开发者
    深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
    深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
    16 0
    |
    1月前
    |
    移动开发 网络协议 C语言
    详解 httptools 模块,一个 HTTP 解析器
    详解 httptools 模块,一个 HTTP 解析器
    28 0
    |
    2月前
    |
    开发者
    HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
    HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
    31 1
    |
    3月前
    |
    缓存 应用服务中间件 nginx
    安装nginx-http-flv-module模块
    本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
    163 1
    |
    6天前
    |
    机器学习/深度学习 人工智能 弹性计算
    什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
    阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
    |
    7天前
    |
    存储 分布式计算 固态存储
    阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
    2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
    |
    6天前
    |
    机器学习/深度学习 人工智能 弹性计算
    阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
    阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。