Konwersja wpisów IPv4 ip:port:user:password dla Requests
Rozdziel ip:port:user:password ograniczonym podziałem i zakoduj składniki danych uwierzytelniających przed zbudowaniem mapy proxy.
Jeśli dostawca proxy HTTP używa formatu IPv4 ip:port:user:password, przekonwertuj pola, zanim przekażesz wartość do 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}
Ograniczony podział zachowuje dodatkowe dwukropki w haśle. Usuwanie tylko końców linii pozwala też uniknąć cichego obcinania spacji, które mogą należeć do danych uwierzytelniających.
Koduj nazwę użytkownika i hasło jako osobne składniki URL. Znaku @ w surowym haśle nie wolno mylić z separatorem przed hostem proxy. Ta funkcja oczekuje surowych danych uwierzytelniających; przekazanie już zakodowanego tekstu może ponownie zakodować znak procentu.
Zwrócona mapa wybiera to proxy dla celów HTTP i HTTPS. Klucz taki jak http://192.0.2.10 ma w Requests inne znaczenie: wybiera trasę dla tego hosta docelowego. Nie jest indeksem puli serwerów proxy.
Parser celowo akceptuje podany format IPv4. Nie obejmuje nazw użytkownika zawierających dwukropki ani adresów IPv6 bez nawiasów; wymagają one jednoznacznego formatu wejściowego. Trzymaj wygenerowane adresy URL z danymi uwierzytelniającymi poza rutynowymi logami.