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

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 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类。
  • 相关文章
    |
    5月前
    |
    C# 图形学 开发者
    Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
    总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
    278 18
    |
    5月前
    |
    应用服务中间件 网络安全 数据安全/隐私保护
    网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
    哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
    312 14
    |
    4月前
    |
    JSON 前端开发 Go
    Go语言实战:创建一个简单的 HTTP 服务器
    本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
    |
    4月前
    |
    Go
    如何在Go语言的HTTP请求中设置使用代理服务器
    当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
    386 0
    |
    6月前
    |
    存储 安全 数据安全/隐私保护
    HFS-快速创建HTTP服务器
    鉴于HFS的操作简便和方便快捷,它在满足快速,临时的文件分享和传输需求上,能够发挥出巨大的作用。只要明确了以上的安全警告,并做好了必需的安全设置,HFS将是一款实用的HTTP服务器工具。
    542 9
    |
    Web App开发 存储 前端开发
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
    1.HBase依赖于HDFS,HBase按照列族将数据存储在不同的hdfs文件中;MongoDB直接存储在本地磁盘中,MongoDB不分列,整个文档都存储在一个(或者说一组)文件中 (存储) 2.
    843 0
    |
    Web App开发 存储 前端开发
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
    NoSuchObjectException(message:There is no database named cloudera_manager_metastore_canary_test_db_hive_hivemetastore_df61080e04cd7eb36c4336f71b5a8bc4) at org.
    1199 0
    |
    Web App开发 前端开发 算法
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
    import java.util.LinkedHashMap;import java.util.Map; /** * LRU (Least Recently Used)  */public class LRUCache e...
    685 0