web3.py のプロキシ設定: HTTPProvider と AsyncHTTPProvider の違い
同じ request_kwargs を両者で使い回すのではなく、HTTPProvider には Requests 形式のプロキシ、AsyncHTTPProvider には aiohttp 形式のプロキシを使います。
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 プロバイダーには独自のトランスポートインターフェースがあります。