За 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 адреси с идентификационни данни далеч от обичайните журнали.

Подобни статии