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.

Artikel terkait