Python urllib: menggabungkan penghalaan proxy dengan Basic Authentication laman web
Gabungkan penghalaan urllib dan Basic authentication destinasi dalam satu opener eksplisit tanpa menggantikan opener global dua kali.
Memanggil install_opener() dua kali tidak menambah opener kedua kepada yang pertama. Ia menggantikan opener lalai modul. Jika satu objek mengetahui proxy dan satu lagi mengetahui log masuk laman web, bina satu opener dengan 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 destinasi ialah contoh. Untuk perkhidmatan awam yang boleh dicapai melalui proxy HTTP awam, senarai proxy HTTP menyediakan endpoint calon untuk handler penghalaan. Opener ini menghalakan permintaan HTTPS melalui proxy HTTP dan mengendalikan cabaran Basic destinasi. Ia tidak mengkonfigurasi pengesahan proxy.
Jika proxy juga memerlukan log masuk, pilih susunan pengesahan proxy yang disokong secara berasingan. 407 pada masa CONNECT berlaku sebelum destinasi boleh mengeluarkan cabarannya sendiri. Menambah kelayakan laman web ke pengurus kata laluan tidak dapat memenuhi pertukaran terdahulu itu.
Memanggil opener.open() secara langsung mengekalkan konfigurasi bersama operasi. Tidak perlu mengubah lalai seluruh modul melainkan aplikasi sengaja mahu semua panggilan kemudahan berkongsi opener ini.