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.

Artículos relacionados