Python urllib: השבתת פרוקסי עבור opener יחיד
צרו opener של urllib עם חיבור ישיר באמצעות ProxyHandler({}), בלי לשנות לקוחות אחרים או את סביבת התהליך.
העבירו מיפוי ריק ל־ProxyHandler כאשר opener יחיד של urllib צריך להתחבר ישירות:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
המילון הריק אינו מספק נתיבי פרוקסי. השמטת המיפוי מאפשרת למטפל לגלות שרתי פרוקסי מתוך הסביבה והגדרות הפלטפורמה. שתי צורות היצירה האלה מבטאות מדיניות שונה.
הדוגמה משתמשת בספרייה הסטנדרטית של Python ומשמרת אימות HTTPS רגיל. בלוק with סוגר את התגובה, גם כאשר חריגה גורמת ליציאה מהבלוק.
בקשות ישירות ודרך פרוקסי באותו יישום
שני אובייקטי opener יכולים לשאת את שתי המדיניויות בלי לשנות משתני סביבה בין קריאות:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
החליפו את כתובת הלולאה המקומית בפרוקסי HTTP שלכם, או בחרו מועמד מתוך רשימת שרתי פרוקסי HTTP להשוואה דרך פרוקסי. הוא יכול להעביר את החיבור ליעד HTTPS באמצעות CONNECT כאשר השירות מאפשר זאת. הפרוטוקול ותמיכת האימות של המאזין צריכים להתאים למטפל.
השאירו את opener ברירת המחדל ללא שינוי
קראו ל־direct.open או ל־proxied.open דרך האובייקט האחראי לנתיב. install_opener משנה את ברירת המחדל לכל התהליך שבה משתמשות פונקציות הנוחות של urllib; לכן ספרייה שמשתמשת בו עלולה להשפיע על קוד לא קשור. הוא אינו נחוץ ל־opener המבודד שלעיל.
הארגומנט timeout הוא הגדרה של פעולה, ולא מועד סיום לפי זמן אמיתי שחל על כל ההעברה. קראו רק את הנתונים הנדרשים, והשתמשו במועד סיום ברמה גבוהה יותר אם למשימה יש תקציב זמן כולל קשיח.
אובייקטי opener אלה אינם משנים לקוח של ספרייה אחרת, תהליך קיים או הגדרות פרוקסי של דפדפן.