Configuración de proxy en web3.py: HTTPProvider frente a AsyncHTTPProvider
Use proxies al estilo de Requests para HTTPProvider y un proxy al estilo de aiohttp para AsyncHTTPProvider en lugar de copiar el mismo request_kwargs entre ambos.
En web3.py 7.14, HTTPProvider usa Requests mientras que AsyncHTTPProvider usa aiohttp. Sus request_kwargs llegan a clientes HTTP distintos.
Para un punto de conexión HTTPS JSON-RPC síncrono:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Mantenga rpc_url como el punto de conexión real del nodo. El valor del mapa nombra al intermediario. Para un nodo RPC público en una ruta de proxy público permitida, la lista de proxies HTTP ofrece candidatos para los valores de proxy HTTP en cualquiera de los dos ejemplos.
El proveedor asíncrono, en cambio, usa proxy en singular con un valor de 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 los proxies a la ruta asíncrona produce un error de palabra clave inesperada en aiohttp. Hay que cambiar tanto la ortografía como el tipo de valor.
Cierre el proveedor asíncrono con await provider.disconnect() en su ruta de limpieza. Estos ajustes pertenecen a los proveedores HTTP; un proveedor WebSocket tiene su propia interfaz de transporte.