Converti le voci IPv4 ip:port:user:password per Requests
Analizza ip:port:user:password con una suddivisione limitata e codifica i componenti delle credenziali prima di costruire la mappa proxy.
Per il formato IPv4 di un provider di proxy HTTP ip:port:user:password, converti i campi prima di passare il valore 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 suddivisione limitata conserva gli eventuali due punti aggiuntivi all'interno della password. Rimuovere solo le terminazioni di riga evita anche di eliminare silenziosamente spazi che potrebbero appartenere a una credenziale.
Codifica nome utente e password come componenti URL separati. Un @ in una password grezza non deve essere confuso con il separatore prima dell'host del proxy. Questa funzione si aspetta credenziali grezze; passare testo già codificato può codificare di nuovo il segno di percentuale.
La mappa restituita seleziona questo proxy per le destinazioni HTTP e HTTPS. Una chiave come http://192.0.2.10 ha un altro significato in Requests: seleziona una route per quell'host di destinazione. Non è un indice in un pool di server proxy.
Il parser accetta deliberatamente solo il formato IPv4 indicato. Non copre nomi utente con due punti né indirizzi IPv6 senza parentesi; questi richiedono un formato di input inequivocabile. Tieni le URL generate con credenziali fuori dai log abituali.