I-convert ang mga entry na IPv4 ip:port:user:password para sa Requests
I-parse ang ip:port:user:password gamit ang limitadong paghahati at i-encode ang mga bahagi ng kredensyal bago buuin ang mapa ng proxy.
Para sa IPv4 na format ip:port:user:password ng isang HTTP proxy provider, i-convert ang mga field bago ibigay ang halaga sa 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}
Pinapanatili ng limitadong paghahati ang anumang dagdag na tutuldok sa loob ng password. Ang pag-alis lamang ng dulo ng mga linya ay umiiwas din sa tahimik na pag-alis ng mga puwang na maaaring bahagi ng kredensyal.
I-encode ang username at password bilang magkahiwalay na bahagi ng URL. Ang @ sa hilaw na password ay hindi dapat ipagkamali sa separator bago ang proxy host. Inaasahan ng function na ito ang hilaw na kredensyal; ang pagpasa ng tekstong naka-encode na ay maaaring muling mag-encode ng percent sign.
Pinipili ng ibinalik na mapa ang proxy na ito para sa mga destinasyong HTTP at HTTPS. Ang key na gaya ng http://192.0.2.10 ay may ibang kahulugan sa Requests: pinipili nito ang ruta para sa destinasyong host na iyon. Hindi ito index para sa isang grupo ng mga proxy server.
Sadyang tinatanggap ng parser ang nakasaad na IPv4 na format. Hindi nito saklaw ang mga username na may tutuldok o mga address na IPv6 na walang bracket; kailangan ng mga iyon ng hindi malabong format ng input. Ilayo ang mga nabuong URL na may kredensyal sa karaniwang mga log.