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()