Python urllib: menggabungkan perutean proxy dengan Basic Authentication situs web
Gabungkan perutean urllib dan Basic authentication tujuan dalam satu opener eksplisit tanpa mengganti opener global dua kali.
Memanggil install_opener() dua kali tidak menambahkan opener kedua ke opener pertama. Itu menggantikan opener default modul. Jika satu objek mengetahui proxy dan objek lain mengetahui login situs, buat satu opener berisi handler yang diperlukan.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()Proxy dan tujuan hanyalah contoh. Untuk layanan publik yang dapat dijangkau melalui proxy HTTP publik, daftar proxy HTTP menyediakan endpoint kandidat untuk handler perutean. Opener ini merutekan permintaan HTTPS melalui proxy HTTP dan menangani tantangan Basic tujuan. Opener ini tidak mengonfigurasi autentikasi proxy.
Jika proxy juga memerlukan login, pilih susunan autentikasi proxy yang didukung secara terpisah. 407 pada waktu CONNECT terjadi sebelum tujuan dapat menerbitkan tantangannya sendiri. Menambahkan kredensial situs ke manajer kata sandi tidak dapat memenuhi pertukaran yang lebih awal itu.
Memanggil opener.open() secara langsung menjaga konfigurasi bersama operasi. Tidak perlu mengubah default seluruh modul kecuali aplikasi memang sengaja ingin semua panggilan praktis berbagi opener ini.