Configuració de proxy a web3.py: HTTPProvider vs. AsyncHTTPProvider
Feu servir proxys a l'estil de Requests per a HTTPProvider i un proxy a l'estil d'aiohttp per a AsyncHTTPProvider, en lloc de copiar el mateix request_kwargs entre tots dos.
A web3.py 7.14, HTTPProvider fa servir Requests mentre que AsyncHTTPProvider fa servir aiohttp. Els seus request_kwargs arriben a clients HTTP diferents.
Per a un punt final HTTPS JSON-RPC síncron:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Manteniu rpc_url com el punt final real del node. El valor del mapa anomena l'intermediari. Per a un node RPC públic en una ruta de proxy públic permesa, la llista de proxys HTTP ofereix candidats per als valors de proxy HTTP en qualsevol dels dos exemples.
El proveïdor asíncron, en canvi, fa servir proxy en singular amb un valor d'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)Copiar els proxys a la ruta asíncrona produeix un error de paraula clau inesperada a aiohttp. Cal canviar tant l'ortografia com el tipus del valor.
Tanceu el proveïdor asíncron amb await provider.disconnect() a la seva ruta de neteja. Aquestes opcions pertanyen als proveïdors HTTP; un proveïdor WebSocket té la seva pròpia interfície de transport.