Python urllib: احراز هویت پایه پراکسی برای درخواستهای HTTP
یک opener صریح urllib برای چالش Basic یک پراکسی HTTP بسازید و این تبادل معمولی HTTP را از احراز هویت HTTPS CONNECT جدا کنید.
برای چالش Basic از سوی پراکسی HTTP از ProxyBasicAuthHandler استفاده کنید. این نمونه معمولی HTTP مسیر و حساب را در یک 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)از نقطه پایانی واقعی و حسابی که اپراتور در اختیار میگذارد استفاده کنید. این هندلر برای چالش پراکسی از مدیر گذرواژه استفاده میکند؛ URI و realm موردنظر پراکسی را مطابقت دهید. احراز هویت Basic در مقصد از هندلر دیگری استفاده میکند.
فراخوانی مستقیم opener این تنظیم را محلی نگه میدارد. نشانی URL درخواست همان وبسایت میماند، نه واسطه. این مسیر HTTP بدون رمزنگاری، تبادل Basic را رمز نمیکند.
از این نمونه پشتیبانی از تونل HTTPS را نتیجه نگیرید. 407 در هنگام CONNECT در مرحله راهاندازی، پیش از پاسخ معمولی مقصد رخ میدهد؛ یکپارچهسازی انتخابی باید احراز هویت را همانجا مدیریت کند. تغییر هندلر ورود سایت نمیتواند آن چالش پیشین را درست کند.
نشانیهای URL پراکسی همراه با اعتبارنامه قالب دیگری است که در نمونههای قدیمی دیده میشود. اگر از آن استفاده میکنید، جداکنندههای URL را درست کدگذاری کنید و URL حاوی راز را از گزارشها دور نگه دارید.