Прокси настройки в web3.py: HTTPProvider срещу AsyncHTTPProvider
Използвайте проксита в стил Requests за HTTPProvider и прокси в стил aiohttp за AsyncHTTPProvider, вместо да копирате едни и същи request_kwargs между тях.
В web3.py 7.14 HTTPProvider използва Requests, а AsyncHTTPProvider — aiohttp. Техните request_kwargs достигат до различни HTTP клиенти.
За синхронен HTTPS JSON-RPC крайна точка:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Запазете rpc_url като действителната крайна точка на възела. Стойността в картата именува посредника. За публичен RPC възел по разрешен маршрут през публично прокси, списъкът с HTTP проксита предоставя кандидати за стойностите на HTTP прокси в който и да е от примерите.
Асинхронният доставчик вместо това използва единствено proxy със стойност 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)Копирането на проксита в асинхронния път води до грешка за неочаквана ключова дума в aiohttp. Трябва да се променят както изписването, така и типът на стойността.
Затворете асинхронния доставчик с await provider.disconnect() в пътя му за почистване. Тези настройки принадлежат на HTTP доставчиците; доставчикът WebSocket има собствен транспортен интерфейс.