在 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 提供程序有自己的传输接口。

相关文章