from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Panggil metode open milik opener ini ketika suatu rute menjadi bagian dari pemeriksaan. Titik akhir HTTP pada contoh dapat berasal dari layanan Anda atau dari daftar proxy HTTP untuk pemeriksaan publik. Fragmen ini menggambarkan kepemilikan; ia tidak mendefinisikan kebijakan autentikasi atau kesehatan secara lengkap. Pertahankan handler khusus akun tetap terpasang pada klien yang dimaksud.

urllib.request.install_opener() mengubah default seluruh proses yang dipakai panggilan urlopen() tingkat modul berikutnya. Pemeriksa yang mengulang melalui proxy karena itu dapat meninggalkan permintaan tak terkait memakai titik akhir terakhirnya. Memasang sementara dan memulihkan saat pembersihan masih memungkinkan permintaan bersamaan berjalan selama mutasi bersama.

socket.setdefaulttimeout() juga mengubah default untuk socket yang dibuat setelahnya. Gunakan batas waktu tingkat operasi ketika hanya pemeriksaan yang seharusnya menerimanya.

Tutup respons pemeriksaan dan jaga hasilnya tetap spesifik: respons kesalahan HTTP bukan otomatis pendengar proxy yang mati. Jika pemeriksaan urllib sinkron dipakai di layanan asinkron, pindahkan pekerjaan yang memblokir ke worker yang sesuai; keputusan eksekusi itu tidak membuat mutasi opener global menjadi terisolasi.

Pemeriksaan seharusnya mengembalikan pengamatannya tanpa meninggalkan kebijakan jaringan lain di belakang. Objek kliennya sendiri dan operasi yang terbatas membuat batas itu eksplisit.

Artikel terkait