Konverti IPv4-enskribojn ip:port:user:password por Requests
Analizu ip:port:user:password per limigita divido kaj kodigu la akreditilajn partojn antaŭ ol konstrui la proksilan mapon.
Por la IPv4-formato de HTTP-proksa provizanto ip:port:user:password, konvertu la kampojn antaŭ ol doni la valoron al 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 limigita divido konservas ĉiujn pliajn dupunktojn ene de la pasvorto. Forigi nur linifinojn ankaŭ malhelpas silente forigi spacojn, kiuj povus aparteni al akreditilo.
Kodigu la uzantnomon kaj pasvorton kiel apartajn URL-komponentojn. @ en kruda pasvorto ne rajtas esti konfuzita kun la apartigilo antaŭ la proksila gastiganto. Ĉi tiu funkcio atendas krudajn akreditilojn; se vi transdonos jam koditan tekston, la procenta signo povas esti kodita denove.
La redonita mapo elektas ĉi tiun proksilon por HTTP kaj HTTPS celoj. Ŝlosilo kiel http://192.0.2.10 havas alian signifon en Requests: ĝi elektas itineron por tiu cella gastiganto. Ĝi ne estas indekso en naĝejo de proksilaj serviloj.
La analizilo intence akceptas nur la indikitan IPv4-formaton. Ĝi ne kovras uzantnomojn kun dupunktoj nek IPv6-adresojn sen krampoj; tiuj bezonas sendubean enigan formaton. Tenu generitajn URL-ojn kun akreditiloj ekster rutinaj protokoloj.