Python urllib: אימות Basic של פרוקסי עבור בקשות 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 הסודי שנוצר מהלוגים.