تحويل مدخلات IPv4 بصيغة ip:port:user:password لطلبات Requests
حلّل ip:port:user:password بتقسيم محدود ورمّز مكوّنات بيانات الاعتماد قبل بناء خريطة الوكيل.
لصيغة IPv4 التي يوفّرها مزوّد وكيل 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. يجب ألا تُخلط علامة @ في كلمة مرور خام مع الفاصل الذي يسبق مضيف الوكيل. تتوقع هذه الدالة بيانات اعتماد خام؛ وتمرير نص مُرمّز مسبقًا قد يعيد ترميز علامة النسبة المئوية.
تختار الخريطة المُعادة هذا الوكيل لوجهات HTTP وHTTPS. المفتاح مثل http://192.0.2.10 له معنى آخر في Requests: فهو يختار مسارًا للمضيف الوجهة، وليس فهرسًا في مجموعة خوادم وكيل.
يقبل المحلّل عمدًا صيغة IPv4 المذكورة فقط. وهو لا يغطي أسماء المستخدمين التي تحتوي على نُقطتين ولا عناوين IPv6 غير الموضوعة بين قوسين؛ فهذه تحتاج إلى صيغة إدخال لا لبس فيها. أبقِ عناوين URL المولّدة التي تحمل بيانات اعتماد خارج سجلات التشغيل المعتادة.