Ustawienia proxy w web3.py: HTTPProvider kontra AsyncHTTPProvider
Używaj proxy w stylu Requests dla HTTPProvider i proxy w stylu aiohttp dla AsyncHTTPProvider, zamiast kopiować te same request_kwargs między nimi.
W web3.py 7.14 HTTPProvider używa Requests, a AsyncHTTPProvider używa aiohttp. Ich request_kwargs trafiają do różnych klientów HTTP.
Dla synchronicznego punktu końcowego HTTPS JSON-RPC:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Zachowaj rpc_url jako rzeczywisty punkt końcowy węzła. Wartość w mapie nazywa pośrednika. Dla publicznego węzła RPC na dozwolonej trasie publicznego proxy lista proxy HTTP dostarcza kandydatów do wartości proxy HTTP w obu przykładach.
Dostawca asynchroniczny używa zamiast tego pojedynczego proxy z wartością 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)Kopiowanie proxy do ścieżki asynchronicznej powoduje błąd nieoczekiwanego słowa kluczowego w aiohttp. Zmienić trzeba zarówno pisownię, jak i typ wartości.
Zamknij dostawcę asynchronicznego za pomocą await provider.disconnect() w jego ścieżce czyszczenia. Te ustawienia należą do dostawców HTTP; dostawca WebSocket ma własny interfejs transportu.