跳到正文
本中心目录
代码示例

Python aiohttp 异步代理接入示例

使用 aiohttp ClientSession、代理认证和异步超时完成并发代理请求。

只只HTTP技术团队维护更新于 2026年7月31日

aiohttp 适合异步任务和受控并发。示例显式传入代理与认证信息,不依赖运行机器的系统代理配置。

前置条件

  • 调用方项目自行安装并锁定 aiohttp
  • 通过受控环境注入 PROXY_HOSTPROXY_PORTPROXY_USERNAMEPROXY_PASSWORD
  • 先根据套餐并发能力设置应用侧并发上限。

完整示例

Python
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、完整异常请求或环境变量输出到日志。不同代理身份应使用独立会话或连接池,避免跨任务复用认证状态。

这篇内容解决了你的问题吗?

反馈只用于改进公开文档,不会提交账号或请求信息。