تبدیل ورودیهای 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 بدون کروشه را پوشش نمیدهد؛ آنها به قالبی بدون ابهام برای ورودی نیاز دارند. نشانیهای تولیدشده دارای اعتبارنامه را بیرون از گزارشهای معمول نگه دارید.