Python aiohttp 异步代理接入示例
使用 aiohttp ClientSession、代理认证和异步超时完成并发代理请求。
只只HTTP技术团队维护更新于 2026年7月31日
aiohttp 适合异步任务和受控并发。示例显式传入代理与认证信息,不依赖运行机器的系统代理配置。
前置条件
- 调用方项目自行安装并锁定
aiohttp。 - 通过受控环境注入
PROXY_HOST、PROXY_PORT、PROXY_USERNAME和PROXY_PASSWORD。 - 先根据套餐并发能力设置应用侧并发上限。
完整示例
import asyncio
import os
import aiohttp
async def main() -> None:
"""通过显式 HTTP 代理异步读取公开出口检测结果。"""
proxy_url = (
f"http://{os.environ['PROXY_HOST']}"
f":{os.environ['PROXY_PORT']}"
)
proxy_auth = aiohttp.BasicAuth(
os.environ["PROXY_USERNAME"],
os.environ["PROXY_PASSWORD"],
)
timeout = aiohttp.ClientTimeout(total=30, connect=10)
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.get(
"https://<public-test-host>/ip",
proxy=proxy_url,
proxy_auth=proxy_auth,
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
预期结果
- HTTPS 请求通过 HTTP CONNECT 建立隧道并返回代理出口。
ClientSession在上下文结束时释放连接资源。- 多个任务共享会话时仍需要使用信号量限制并发。
错误处理
ClientProxyConnectionError优先检查主机、端口和网络可达性。- 407 优先检查代理账密,不要误改目标网站认证。
- 超时或连接重置应进入有限退避,不应无限并发重试。
安全提示
不要把 proxy_auth、完整异常请求或环境变量输出到日志。不同代理身份应使用独立会话或连接池,避免跨任务复用认证状态。
这篇内容解决了你的问题吗?
反馈只用于改进公开文档,不会提交账号或请求信息。