Berikan pemetaan kosong kepada ProxyHandler jika satu opener urllib harus terhubung langsung:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Dictionary kosong tidak menyediakan rute proksi. Menghilangkan pemetaan justru membiarkan handler menemukan proksi dari lingkungan dan pengaturan platform. Kedua konstruksi ini menyatakan kebijakan yang berbeda.

Contoh menggunakan pustaka standar Python dan mempertahankan verifikasi HTTPS normal. Blok with menutup respons, termasuk ketika pengecualian menyebabkan eksekusi keluar dari blok.

Permintaan langsung dan melalui proksi dalam aplikasi yang sama

Dua opener dapat membawa kedua kebijakan tanpa mengubah variabel lingkungan di antara panggilan:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Ganti alamat loopback dengan proksi HTTP Anda, atau pilih kandidat dari daftar proksi HTTP untuk perbandingan melalui proksi. Koneksi ke target HTTPS dapat dibawa melalui CONNECT jika layanan mengizinkannya. Protokol dan dukungan autentikasi listener harus sesuai dengan handler.

Biarkan opener bawaan tetap utuh

Panggil direct.open atau proxied.open melalui objek yang bertanggung jawab atas rute. install_opener mengubah bawaan seluruh proses yang digunakan fungsi praktis urllib; karena itu pustaka yang menggunakannya dapat memengaruhi kode yang tidak terkait. Ini tidak diperlukan untuk opener terisolasi di atas.

Argumen timeout adalah pengaturan operasi, bukan tenggat waktu nyata untuk keseluruhan setiap transfer. Baca hanya data yang diperlukan dan gunakan tenggat tingkat lebih tinggi jika tugas memiliki anggaran total waktu yang ketat.

Objek opener ini tidak mengubah klien pustaka lain, proses yang sudah ada, atau pengaturan proksi browser.

Artikel terkait