For en HTTP-proxyleverandørs IPv4-format ip:port:user:password, konverter feltene 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 avgrensede splittingen bevarer eventuelle ekstra kolon i passordet. Å fjerne bare linjeslutt unngår også å fjerne mellomrom som kan tilhøre en påloggingsdetalj, uten å si fra.

Kod brukernavnet og passordet som separate URL-komponenter. En @ i et rått passord må ikke forveksles med skilletegnet før proxy-verten. Denne funksjonen forventer rå påloggingsdetaljer; sender du allerede kodet tekst, kan prosenttegnet bli kodet på nytt.

Kartet som returneres, velger denne proxyen for HTTP- og HTTPS-destinasjoner. En nøkkel som http://192.0.2.10 har en annen betydning i Requests: den velger en rute for den destinasjonsverten. Den er ikke en indeks for en gruppe proxyservere.

Parsereren godtar med vilje det angitte IPv4-formatet. Den dekker ikke brukernavn med kolon eller IPv6-adresser uten klammer; de trenger et entydig inndataformat. Hold genererte URL-er med påloggingsdetaljer unna vanlige logger.

Relaterte artikler