IPv4 ip:port:user:password-regels voor Requests omzetten
Parse ip:port:user:password met een begrensde splitsing en codeer de inloggegevens voordat je de proxy-map bouwt.
Voor het IPv4-formaat ip:port:user:password van een HTTP-proxyprovider converteer je de velden voordat je de waarde aan Requests geeft:
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}
De begrensde splitsing behoudt extra dubbele punten in het wachtwoord. Alleen regeleinden verwijderen voorkomt ook dat spaties die bij een inloggegeven horen stilletjes verdwijnen.
Codeer de gebruikersnaam en het wachtwoord als afzonderlijke URL-componenten. Een @ in een onbewerkt wachtwoord mag niet worden verward met het scheidingsteken voor de proxyhost. Deze functie verwacht onbewerkte inloggegevens; als je al gecodeerde tekst doorgeeft, kan het procentteken opnieuw worden gecodeerd.
De geretourneerde map kiest deze proxy voor HTTP- en HTTPS-bestemmingen. Een sleutel als http://192.0.2.10 heeft in Requests een andere betekenis: die kiest een route voor die bestemmingshost. Het is geen index voor een groep proxyservers.
De parser accepteert bewust het genoemde IPv4-formaat. Het dekt geen gebruikersnamen met dubbele punten of IPv6-adressen zonder haken; die hebben een ondubbelzinnig invoerformaat nodig. Houd gegenereerde URL met inloggegevens buiten gewone logs.