Proxyinställningar i web3.py: HTTPProvider kontra AsyncHTTPProvider
Använd Requests-liknande proxyservrar för HTTPProvider och en aiohttp-liknande proxy för AsyncHTTPProvider i stället för att kopiera samma request_kwargs mellan dem.
I web3.py 7.14 använder HTTPProvider Requests medan AsyncHTTPProvider använder aiohttp. Deras request_kwargs når olika HTTP-klienter.
För en synkron HTTPS JSON-RPC-slutpunkt:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Behåll rpc_url som nodens faktiska slutpunkt. Värdet i kartan anger mellanhanden. För en offentlig RPC-nod på en tillåten offentlig proxyväg tillhandahåller HTTP-proxylistan kandidater för HTTP-proxyvärdena i båda exemplen.
Den asynkrona leverantören använder i stället singular proxy med ett URL-värde:
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)Att kopiera proxyservrar till den asynkrona vägen ger ett oväntat nyckelordsfel i aiohttp. Både stavningen och värdetypen måste ändras.
Stäng den asynkrona leverantören med await provider.disconnect() i dess städväg. Dessa inställningar tillhör HTTP-leverantörerna; en WebSocket-leverantör har sitt eget transportgränssnitt.