For IPv4-formatet ip:port:user:password til ein HTTP-proxyleverandør, konverter felta før du gir verdien til 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}

Den avgrensa splittinga tek vare på eventuelle ekstra kolon i passordet. Å fjerna berre linjesluttar unngår òg å fjerna mellomrom som kan høyra til ein innloggingsopplysning, utan å seia frå.

Kod brukarnamnet og passordet som separate URL-komponentar. Ein @ i eit rått passord må ikkje forvekslast med skiljeteiknet før proxyverten. Denne funksjonen ventar råe innloggingsopplysningar; sender du tekst som alt er koda, kan prosentteiknet bli koda på nytt.

Kartet som blir returnert, vel denne proxyen for HTTP- og HTTPS-destinasjonar. Ein nøkkel som http://192.0.2.10 har ei anna meining i Requests: han vel ei rute for den destinasjonsverten. Han er ikkje ein indeks for ei gruppe proxyservarar.

Parseren godtek med vilje det oppgjevne IPv4-formatet. Han dekkjer ikkje brukarnamn med kolon eller IPv6-adresser utan klammer; dei treng eit eintydig inndataformat. Hald genererte URL-ar med innloggingsopplysningar unna vanlege loggar.

Relaterte artiklar