汉字魔法师
118.67M · 2026-02-04
h11 是一个用于低层、事件驱动的 HTTP/1.1 协议实现的 Python 库。 它可以帮助你:
h11 广泛应用于以下实际场景:
pip install h11
# 如果安装慢的话,推荐使用国内镜像源
pip install h11 -i
创建一个简单的 h11 客户端请求
import h11
# 创建一个 h11 状态机,模拟客户端
conn = h11.Connection(our_role=h11.CLIENT)
# 构造请求头
request = h11.Request(
method=b"GET",
target=b"/",
headers=[
(b"Host", b"example.com"),
(b"User-Agent", b"h11-example-client"),
],
)
# 发送请求头,并获取序列化后的字节数据
data_to_send = conn.send(request)
print(f"发送请求头数据: {data_to_send!r}")
# 模拟接收到服务器的响应头
# 注意:在实际应用中,这里会从网络socket读取数据
response_data_from_server = (
b"HTTP/1.1 200 OKrn"
b"Content-Length: 13rn"
b"Content-Type: text/plainrn"
b"rn"
)
conn.receive_data(response_data_from_server)
# 处理接收到的事件,直到解析出响应
while True:
event = conn.next_event()
if isinstance(event, h11.Response):
print(f"接收到响应: {event.status_code} {event.headers}")
# 根据状态码判断是否成功
if event.status_code == 200:
print("请求成功!")
else:
print(f"请求失败,状态码: {event.status_code}")
break # 退出循环
elif event == h11.NEED_DATA:
# 在实际应用中,这里会从socket继续读取数据
print("需要更多数据才能完成解析...")
break # 示例中不再模拟更多数据,直接退出
elif event == h11.PAUSED:
print("解析暂停...")
break
else:
print(f"接收到其他事件: {type(event)}")
使用 PythonRun 在线运行这段代码,结果如下:
发送请求头数据: b'GET / HTTP/1.1rnHost: example.comrnUser-Agent: h11-example-clientrnrn'
接收到响应: 200 <Headers([(b'content-length', b'13'), (b'content-type', b'text/plain')])>
请求成功!
使用 MermaidGo 绘制示例代码的流程图,结果如下: