הימנעו משינויים גלובליים של opener של urllib בבודקי proxy
השאירו בדיקות proxy של urllib מקומיות ל-opener שלהן במקום להחליף את ברירות המחדל של הניתוב וזמני החסימה בכל התהליך.
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.קראו לשיטת open של opener זה עצמו כאשר נתיב שייך לבדיקה. נקודת הקצה של HTTP בדוגמה עשויה לבוא מהשירות שלכם או מרשימת proxy של HTTP לבדיקות ציבוריות. הקטע ממחיש בעלות; הוא אינו מגדיר את מדיניות האימות או הבריאות המלאה. השאירו כל מטפל ייחודי לחשבון מחובר ללקוח המיועד.
urllib.request.install_opener() משנה את ברירת המחדל של התהליך כולו שבה משתמשות קריאות urlopen() מאוחרות ברמת המודול. לכן בודק שעובר על proxies עלול להשאיר בקשות לא קשורות משתמשות בנקודת הקצה האחרונה שלו. התקנה זמנית ושחזור בניקוי עדיין מאפשרים לבקשות מקבילות לרוץ בזמן השינוי המשותף.
socket.setdefaulttimeout() משנה באופן דומה את ברירות המחדל של sockets שנוצרים לאחר מכן. השתמשו בזמן החסימה ברמת הפעולה כאשר רק הבדיקה אמורה לקבל אותו.
סגרו תגובות בדיקה ושמרו על תוצאות ספציפיות: תגובת שגיאת HTTP אינה אוטומטית מאזין proxy מת. אם בדיקת urllib סינכרונית משמשת בשירות אסינכרוני, העבירו עבודה חוסמת לעובד מתאים; החלטת הביצוע הזו אינה הופכת את שינוי ה-opener הגלובלי למבודד.
בדיקה צריכה להחזיר את התצפית שלה בלי להשאיר מדיניות רשת אחרת מאחור. אובייקט הלקוח שלה והפעולה המוגבלת הופכים את הגבול הזה למפורש.