מעקב אחר הפניה יחסית דרך הפרוקסי
פתרו Location יחסי מול כתובת היעד הנוכחית, תוך הרחקת כתובת הפרוקסי מפתרון הכתובות.
תגובה שמתקבלת דרך פרוקסי עשויה להחזיר Location יחסי:
Location: ../new/
HTTP מודרני מתיר כאן הפניית URI. פתרו אותה מול הכתובת שיצרה את התגובה. אם הכתובת הייתה https://docs.example/catalog/old/, ההפניה שלמעלה מזהה את https://docs.example/catalog/new/. שם המארח של הפרוקסי אינו הבסיס.
עבור בקשות Python urllib רגילות, השתמשו במטפל ההפניות שלה במקום לחבר מחרוזות סביב נקודת הקצה של הפרוקסי:
opener = build_opener(ProxyHandler({
"https": "http://proxy.example:8080",
}))
with opener.open("https://docs.example/catalog/old/",
timeout=15) as response:
final_url = response.geturl()
עבור בקשת מסמך ציבורי זו ללא אימות פרוקסי, מועמד HTTP מתוך רשימת פרוקסי ה-HTTP יכול להחליף את נקודת הקצה לדוגמה כאשר המסלול מותר. המחלקות מגיעות מ-urllib.request. המטפל הרגיל שלה עוקב אחר הפניות נתמכות בגבולותיו. final_url מתאר את כתובת המשאב הסופית, לא את המתווך ששימש להגעה אליה.
פתרו תחילה, ואז בחרו את המסלול הבא
הפניה יכולה לשנות את מארח היעד או את הסכימה. לכן מדיניות פרוקסי מבוססת יעד צריכה להעריך גם את הכתובת החדשה. מסלול שעבד עבור המארח הראשון עשוי שלא להתאים לשני.
כשאתם מיישמים בעצמכם טיפול בהפניות, השתמשו בפתרון הפניית URI עם טיפול בקטעי נקודה. שמרו על כללי השיטה של קוד המצב בפועל והטילו מגבלת הפניות. הוספת Location לשם מארח אינה תחליף לאלגוריתם הפתרון הזה.
אם הפניה נכשלת, שמרו את הכתובת המבוקשת, את מצב התגובה, את ערך Location ואת הכתובת הבאה שנפתרה. ארבעת הערכים האלה מראים בדרך כלל אם הכשל שייך לבניית הכתובת או לחיבור שנוסה לאחר מכן.