Converte as entradas IPv4 ip:port:user:password para Requests
Analiza ip:port:user:password cunha división limitada e codifica os compoñentes das credenciais antes de construír o mapa de proxy.
Para o formato IPv4 dun provedor de proxy HTTP ip:port:user:password, converte os campos antes de pasarlle o 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}
A división limitada conserva os dous puntos adicionais dentro do contrasinal. Eliminar só os finais de liña tamén evita quitar en silencio espazos que poderían pertencer a unha credencial.
Codifica o nome de usuario e o contrasinal como compoñentes de URL separados. Un @ nun contrasinal en bruto non debe confundirse co separador anterior ao host do proxy. Esta función espera credenciais en bruto; pasar texto xa codificado pode volver codificar o signo de porcentaxe.
O mapa devolto selecciona este proxy para destinos HTTP e HTTPS. Unha clave como http://192.0.2.10 ten outro significado en Requests: selecciona unha ruta para ese host de destino. Non é un índice dun conxunto de servidores proxy.
O analizador acepta deliberadamente só o formato IPv4 indicado. Non cobre nomes de usuario con dous puntos nin enderezos IPv6 sen corchetes; eses precisan un formato de entrada inequívoco. Mantén as URL xeradas con credenciais fóra dos rexistros habituais.