Z
ZHANK
异步编程

aiohttp 异步 HTTP

异步 HTTP 客户端/服务端、并发请求、Session 复用

aiohttp 异步 HTTP

aiohttp 是 Python 异步 HTTP 的事实标准——同时支持客户端和服务端,性能远超同步 requests。

学完本章你将: 掌握异步 HTTP 客户端、并发请求、Session 复用。


客户端基础

python
import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            return await resp.text()

async def main():
    html = await fetch("https://httpbin.org/get")
    print(html[:200])

asyncio.run(main())

并发请求

python
urls = [
    "https://httpbin.org/delay/1",
    "https://httpbin.org/delay/1",
    "https://httpbin.org/delay/1",
]

async def fetch_all(urls):
    async with aiohttp.ClientSession() as session:
        tasks = [session.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [await r.text() for r in responses]

# 三个请求并发——总共 ~1 秒(不是 3 秒)

Session 复用

python
# ✅ 复用 Session(连接池、Cookie 共享)
async with aiohttp.ClientSession() as session:
    for url in urls:
        async with session.get(url) as resp:
            ...

# ❌ 每次请求新建 Session(浪费连接)

POST + JSON

python
async with aiohttp.ClientSession() as session:
    async with session.post(
        "https://httpbin.org/post",
        json={"name": "小明", "age": 25},
        headers={"Authorization": "Bearer xxx"},
    ) as resp:
        data = await resp.json()