Per al format IPv4 d'un proveïdor de proxy HTTP ip:port:user:password, converteix els camps abans de passar el valor a 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}

La divisió limitada conserva qualsevol dos-punts addicional dins de la contrasenya. Eliminar només els finals de línia també evita treure en silenci espais que podrien formar part d'una credencial.

Codifica el nom d'usuari i la contrasenya com a components d'URL separats. Un @ en una contrasenya crua no s'ha de confondre amb el separador anterior a l'amfitrió del proxy. Aquesta funció espera credencials crues; passar text ja codificat pot tornar a codificar el signe de percentatge.

El mapa retornat selecciona aquest proxy per a destinacions HTTP i HTTPS. Una clau com http://192.0.2.10 té un altre significat a Requests: selecciona una ruta per a aquest amfitrió de destinació. No és un índex d'una agrupació de servidors proxy.

L'analitzador accepta deliberadament només el format IPv4 indicat. No cobreix noms d'usuari amb dos-punts ni adreces IPv6 sense claudàtors; aquests necessiten un format d'entrada inequívoc. Mantingues les URL generades amb credencials fora dels registres habituals.

Articles relacionats