Python urllib: Lumpuhkan Proksi untuk Satu Opener
Cipta opener urllib yang bersambung terus dengan ProxyHandler({}), tanpa mengubah klien lain atau persekitaran proses.
Hantar pemetaan kosong kepada ProxyHandler apabila satu opener urllib perlu bersambung terus:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Kamus kosong tidak menyediakan laluan proksi. Jika pemetaan ditinggalkan, pengendali mengesan proksi daripada persekitaran dan tetapan platform. Kedua-dua pembinaan ini menyatakan dasar yang berlainan.
Contoh menggunakan pustaka piawai Python dan mengekalkan pengesahan HTTPS biasa. Blok with menutup respons, termasuk apabila pengecualian menyebabkan pelaksanaan keluar daripada blok.
Permintaan terus dan melalui proksi dalam aplikasi yang sama
Dua opener boleh membawa kedua-dua dasar tanpa mengubah pemboleh ubah persekitaran 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)
Gantikan alamat gelung balik dengan proksi HTTP anda, atau pilih calon daripada senarai proksi HTTP untuk perbandingan melalui proksi. Ia boleh membawa sambungan ke sasaran HTTPS melalui CONNECT apabila perkhidmatan membenarkannya. Protokol dan sokongan pengesahan pendengar perlu sepadan dengan pengendali.
Biarkan opener lalai
Panggil direct.open atau proxied.open melalui objek yang bertanggungjawab terhadap laluan. install_opener mengubah lalai seluruh proses yang digunakan oleh fungsi kemudahan urllib; pustaka yang menggunakannya boleh menjejaskan kod yang tidak berkaitan. Ia tidak diperlukan untuk opener terasing di atas.
Argumen timeout ialah tetapan operasi, bukan tarikh akhir masa sebenar yang meliputi keseluruhan setiap pemindahan. Baca hanya data yang diperlukan dan gunakan tarikh akhir aras lebih tinggi jika tugas mempunyai belanjawan jumlah masa yang ketat.
Objek opener ini tidak mengubah klien pustaka lain, proses sedia ada atau tetapan proksi pelayar.