המרת רשומות IPv4 מסוג ip:port:user:password עבור Requests
נתחו את ip:port:user:password בפיצול חסום וקודדו את רכיבי האישורים לפני בניית מפת ה-proxy.
עבור תבנית ה-IPv4 של ספק proxy מסוג HTTP ip:port:user:password, המירו את השדות לפני מסירת הערך ל-Requests:
from ipaddress import IPv4Address
from urllib.parse import quote
def proxy_map(line):
host, port, user, password = line.rstrip('\r\n').split(':', 3)
host = str(IPv4Address(host))
port = int(port)
if not 1 <= port <= 65535:
raise ValueError('Proxy port is out of range')
credentials = quote(user, safe='') + ':' + quote(password, safe='')
url = f'http://{credentials}@{host}:{port}'
return {'http': url, 'https': url}
הפיצול החסום משמר כל נקודתיים נוספות בתוך הסיסמה. הסרת סופי שורות בלבד מונעת גם הסרה שקטה של רווחים שעשויים להיות חלק מהאישורים.
קודדו את שם המשתמש והסיסמה כרכיבי URL נפרדים. אין לבלבל בין @ בסיסמה גולמית לבין המפריד שלפני מארח ה-proxy. פונקציה זו מצפה לאישורים גולמיים; העברת טקסט שכבר מקודד עלולה לקודד שוב את סימן האחוז.
המפה המוחזרת בוחרת את ה-proxy הזה עבור יעדי HTTP ו-HTTPS. מפתח כמו http://192.0.2.10 משמעו אחר ב-Requests: הוא בוחר מסלול עבור מארח היעד הזה. זה אינו אינדקס למאגר שרתי proxy.
המנתח מקבל במכוון רק את תבנית ה-IPv4 הנקובה. הוא אינו מכסה שמות משתמש המכילים נקודתיים או כתובות IPv6 ללא סוגריים; אלה זקוקים לתבנית קלט חד-משמעית. הרחיקו כתובות URL שנוצרו ונושאות אישורים מיומני שגרה.