Convierte entradas IPv4 ip:port:user:password para Requests
Analiza ip:port:user:password con una división acotada y codifica los componentes de las credenciales antes de construir el mapa de proxy.
Para el formato IPv4 de un proveedor de proxy HTTP ip:port:user:password, convierte los campos antes de pasar 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ón acotada conserva los dos puntos adicionales dentro de la contraseña. Eliminar solo los finales de línea también evita quitar en silencio espacios que podrían pertenecer a una credencial.
Codifica el nombre de usuario y la contraseña como componentes de URL separados. Un @ en una contraseña sin procesar no debe confundirse con el separador anterior al host del proxy. Esta función espera credenciales sin procesar; pasar texto ya codificado puede volver a codificar el signo de porcentaje.
El mapa devuelto selecciona este proxy para destinos HTTP y HTTPS. Una clave como http://192.0.2.10 tiene otro significado en Requests: selecciona una ruta para ese host de destino. No es un índice de un grupo de servidores proxy.
El analizador acepta deliberadamente solo el formato IPv4 indicado. No cubre nombres de usuario con dos puntos ni direcciones IPv6 sin corchetes; esos necesitan un formato de entrada inequívoco. Mantén las URL generadas con credenciales fuera de los registros habituales.