Перетворення записів IPv4 ip:port:user:password для Requests
Розберіть ip:port:user:password обмеженим розділенням і закодуйте частини облікових даних перед побудовою карти проксі.
Якщо постачальник HTTP-проксі використовує формат IPv4 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 з обліковими даними поза звичайними журналами.