在 aiohttp 中使用 aiohttp-socks 进行 SOCKS 路由
使用兼容且支持 SOCKS 的连接器,而不是照抄已删除连接器类的旧 aiohttp 代理示例。
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 代理选项,不能替代连接器文档中说明的路径。