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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 使用`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类。
  • 相关文章
    |
    10月前
    |
    C# 图形学 开发者
    Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
    总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
    562 18
    |
    10月前
    |
    应用服务中间件 网络安全 数据安全/隐私保护
    网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
    哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
    487 14
    |
    9月前
    |
    JSON 前端开发 Go
    Go语言实战:创建一个简单的 HTTP 服务器
    本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
    |
    9月前
    |
    Go
    如何在Go语言的HTTP请求中设置使用代理服务器
    当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
    614 0
    |
    11月前
    |
    存储 安全 数据安全/隐私保护
    HFS-快速创建HTTP服务器
    鉴于HFS的操作简便和方便快捷,它在满足快速,临时的文件分享和传输需求上,能够发挥出巨大的作用。只要明确了以上的安全警告,并做好了必需的安全设置,HFS将是一款实用的HTTP服务器工具。
    1346 9
    |
    6月前
    |
    弹性计算 运维 安全
    阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
    阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
    519 10
    |
    6月前
    |
    运维 安全 Ubuntu
    阿里云渠道商:服务器操作系统怎么选?
    阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
    |
    6月前
    |
    弹性计算 ice
    阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
    阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
    650 8
    |
    6月前
    |
    存储 监控 安全
    阿里云渠道商:云服务器价格有什么变动?
    阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
    |
    6月前
    |
    弹性计算 运维 安全
    区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
    阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
    439 2
    下一篇
    开通oss服务