aiohttp 通过其请求选项记录了 HTTP 代理支持。SOCKS 端点需要一种能说 SOCKS 的实现。把代理 URL 的端口改成 1080 并不能提供这种实现。

在 async 函数内部,使用维护中的 aiohttp-socks 项目提供的连接器:

import aiohttp
from aiohttp_socks import ProxyConnector

connector = ProxyConnector.from_url('socks5://203.0.113.10:1080')
async with aiohttp.ClientSession(connector=connector) as session:
    async with session.get('https://example.com/') as response:
        body = await response.read()

这假设连接器包已经可用,并与应用中的 aiohttp 版本兼容。该端点仅作示例;SOCKS5 代理列表为连接器 URL 提供公共候选。请针对实际工作负载配置超时和响应大小策略。

旧的回答提到不同的包和连接器名称:aiosocks、aiosocksy 和 aiohttp-socks 并不是可以互换的导入路径。请阅读实际所用包的要求和示例。把一个项目的类与另一个项目的参数组合,可能会在尝试任何代理连接之前就失败。

把连接器和会话生命周期放在一起,并在重要之处检查主机名解析行为。把 SOCKS URL 传给无关的 HTTP 代理选项,不能替代连接器文档中说明的路径。

相关文章