web3.py 代理设置:HTTPProvider 与 AsyncHTTPProvider
为 HTTPProvider 使用 Requests 风格的代理,为 AsyncHTTPProvider 使用 aiohttp 风格的代理,而不是在两者之间复制同一份 request_kwargs。
在 web3.py 7.14 中,HTTPProvider 使用 Requests,而 AsyncHTTPProvider 使用 aiohttp。两者的 request_kwargs 会传给不同的 HTTP 客户端。
对于同步的 HTTPS JSON-RPC 端点:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))让 rpc_url 保持为实际的节点端点。映射中的值指定中间人。对于位于允许的公共代理路由上的公共 RPC 节点,HTTP 代理列表可为任一示例中的 HTTP 代理值提供候选项。
异步提供程序则使用单数形式的 proxy 并传入 URL 值:
from aiohttp import ClientTimeout
from web3 import AsyncHTTPProvider, AsyncWeb3
provider = AsyncHTTPProvider(
rpc_url,
request_kwargs={
'proxy': 'http://proxy.example:8080',
'timeout': ClientTimeout(total=20),
},
)
async_client = AsyncWeb3(provider)把 proxies 复制到异步路径会在 aiohttp 中引发意外关键字错误。拼写和值的类型都需要改。
在清理路径中用 await provider.disconnect() 关闭异步提供程序。这些设置属于 HTTP 提供程序;WebSocket 提供程序有自己的传输接口。