web3.py-Proxy-Einstellungen: HTTPProvider vs. AsyncHTTPProvider
Verwenden Sie Proxys im Requests-Stil für HTTPProvider und einen Proxy im aiohttp-Stil für AsyncHTTPProvider, statt dieselben request_kwargs zwischen ihnen zu kopieren.
In web3.py 7.14 verwendet HTTPProvider Requests, während AsyncHTTPProvider aiohttp verwendet. Ihre request_kwargs erreichen unterschiedliche HTTP-Clients.
Für einen synchronen HTTPS-JSON-RPC-Endpunkt:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Behalten Sie rpc_url als den tatsächlichen Node-Endpunkt bei. Der Wert in der Map benennt den Vermittler. Für einen öffentlichen RPC-Node auf einer zulässigen öffentlichen Proxy-Route liefert die HTTP-Proxy-Liste Kandidaten für die HTTP-Proxy-Werte in beiden Beispielen.
Der asynchrone Provider verwendet stattdessen das Singular proxy mit einem URL-Wert:
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)Das Kopieren von Proxys in den asynchronen Pfad erzeugt in aiohttp einen Fehler wegen eines unerwarteten Schlüsselworts. Sowohl die Schreibweise als auch der Werttyp müssen sich ändern.
Schließen Sie den asynchronen Provider mit await provider.disconnect() in seinem Aufräumpfad. Diese Einstellungen gehören zu den HTTP-Providern; ein WebSocket-Provider hat seine eigene Transportschnittstelle.