Konvertera IPv4-posterna ip:port:user:password för Requests
Parsa ip:port:user:password med en avgränsad delning och koda inloggningsuppgifterna innan du bygger proxykartan.
För en HTTP-proxyleverantörs IPv4-format ip:port:user:password konverterar du fälten innan du ger värdet till 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 avgränsade delningen bevarar eventuella extra kolon i lösenordet. Att bara ta bort radslut undviker också att blanksteg som kan tillhöra en inloggningsuppgift tas bort i tysthet.
Koda användarnamnet och lösenordet som separata URL-komponenter. Ett @ i ett rått lösenord får inte förväxlas med avgränsaren före proxyvärden. Den här funktionen förväntar sig råa inloggningsuppgifter; skickar du redan kodad text kan procenttecknet kodas om.
Den returnerade kartan väljer denna proxy för HTTP- och HTTPS-destinationer. En nyckel som http://192.0.2.10 har en annan betydelse i Requests: den väljer en rutt för den destinationsvärden. Det är inte ett index för en grupp proxyservrar.
Parsern accepterar medvetet det angivna IPv4-formatet. Den täcker inte användarnamn med kolon eller IPv6-adresser utan hakparenteser; de kräver ett entydigt indataformat. Håll genererade URL:er med inloggningsuppgifter borta från vanliga loggar.