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 プロキシ値の候補を提供します。

非同期プロバイダーは代わりに、URL 値を取る単数形の proxy を使います:

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)

プロキシを非同期の経路にコピーすると、aiohttp で予期しないキーワードのエラーになります。綴りと値の型の両方を変える必要があります。

非同期プロバイダーは後片付けの経路で await provider.disconnect() を呼んで閉じます。これらの設定は HTTP プロバイダーに属します。WebSocket プロバイダーには独自のトランスポートインターフェースがあります。

関連記事