Pengaturan proksi web3.py: HTTPProvider vs. AsyncHTTPProvider
Gunakan proksi bergaya Requests untuk HTTPProvider dan proksi bergaya aiohttp untuk AsyncHTTPProvider alih-alih menyalin request_kwargs yang sama di antara keduanya.
Di web3.py 7.14, HTTPProvider menggunakan Requests sedangkan AsyncHTTPProvider menggunakan aiohttp. request_kwargs keduanya menjangkau klien HTTP yang berbeda.
Untuk endpoint HTTPS JSON-RPC yang sinkron:
from web3 import Web3
client = Web3(Web3.HTTPProvider(
rpc_url,
request_kwargs={
'proxies': {'https': 'http://proxy.example:8080'},
'timeout': 20,
},
))Pertahankan rpc_url sebagai endpoint node yang sebenarnya. Nilai dalam peta menamai perantara. Untuk node RPC publik pada rute proksi publik yang diizinkan, daftar proksi HTTP menyediakan kandidat untuk nilai proksi HTTP pada kedua contoh.
Penyedia asinkron sebaliknya menggunakan proxy tunggal dengan nilai 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)Menyalin proksi ke jalur asinkron menghasilkan kesalahan kata kunci tak terduga di aiohttp. Ejaan dan tipe nilainya sama-sama perlu diubah.
Tutup penyedia asinkron dengan await provider.disconnect() di jalur pembersihannya. Pengaturan ini milik penyedia HTTP; penyedia WebSocket memiliki antarmuka transportnya sendiri.