Python urllib: pengesahan Basic proksi untuk permintaan HTTP
Bina opener urllib eksplisit untuk cabaran Basic daripada proksi HTTP, dan bezakan pertukaran HTTP biasa ini daripada pengesahan HTTPS CONNECT.
Untuk cabaran Basic daripada proksi HTTP, gunakan ProxyBasicAuthHandler. Contoh HTTP biasa ini menyimpan laluan dan akaun dalam satu opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Gunakan titik akhir sebenar dan akaun yang diberikan oleh pengendali. Pengendali ini menggunakan pengurus kata laluan untuk cabaran proksi; padankan URI dan realm proksi yang dimaksudkan. Pengesahan Basic di destinasi menggunakan pengendali lain.
Memanggil opener secara langsung mengekalkan persediaan ini secara setempat. URL permintaan kekal sebagai laman web, bukan perantara. Laluan HTTP jelas ini tidak menyulitkan pertukaran Basic.
Jangan simpulkan sokongan terowong HTTPS daripada contoh ini. 407 semasa CONNECT berlaku semasa persediaan, sebelum respons destinasi biasa; integrasi yang dipilih mesti mengendalikan pengesahan di situ. Menukar pengendali log masuk laman web tidak dapat membaiki cabaran terdahulu itu.
URL proksi yang membawa kelayakan ialah format lain yang terdapat dalam contoh lama. Jika digunakan, kodkan pembatas URL dengan betul dan jauhkan URL yang mengandungi rahsia daripada log.