Impostazioni proxy in web3.py: HTTPProvider vs. AsyncHTTPProvider
Usate proxy in stile Requests per HTTPProvider e un proxy in stile aiohttp per AsyncHTTPProvider invece di copiare gli stessi request_kwargs tra i due.
In web3.py 7.14, HTTPProvider usa Requests mentre AsyncHTTPProvider usa aiohttp. I loro request_kwargs raggiungono client HTTP diversi.
Per un endpoint HTTPS JSON-RPC sincrono:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Mantenete rpc_url come endpoint effettivo del nodo. Il valore nella mappa indica l'intermediario. Per un nodo RPC pubblico su una rotta proxy pubblica consentita, la lista di proxy HTTP fornisce candidati per i valori proxy HTTP in entrambi gli esempi.
Il provider asincrono usa invece proxy al singolare con un valore 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)Copiare i proxy nel percorso asincrono produce un errore di parola chiave inattesa in aiohttp. Devono cambiare sia l'ortografia sia il tipo di valore.
Chiudete il provider asincrono con await provider.disconnect() nel suo percorso di pulizia. Queste impostazioni appartengono ai provider HTTP; un provider WebSocket ha la propria interfaccia di trasporto.