Convertirea intrărilor IPv4 ip:port:user:password pentru Requests
Împarte ip:port:user:password printr-o separare limitată și codifică componentele acreditărilor înainte de a construi harta proxy.
Pentru formatul IPv4 ip:port:user:password al unui furnizor de proxy HTTP, convertește câmpurile înainte de a da valoarea către 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}
Separarea limitată păstrează orice două puncte suplimentare din parolă. Eliminarea doar a terminațiilor de linie evită, de asemenea, eliminarea silențioasă a spațiilor care pot aparține unei acreditări.
Codifică numele de utilizator și parola ca componente URL separate. Un @ într-o parolă brută nu trebuie confundat cu separatorul dinaintea hostului proxy. Această funcție așteaptă acreditări brute; transmiterea unui text deja codificat poate codifica din nou semnul procentual.
Harta returnată selectează acest proxy pentru destinații HTTP și HTTPS. O cheie precum http://192.0.2.10 are altă semnificație în Requests: selectează o rută pentru acel host de destinație. Nu este un index pentru un grup de servere proxy.
Parserul acceptă intenționat formatul IPv4 menționat. Nu acoperă nume de utilizator cu două puncte sau adrese IPv6 fără paranteze; acestea necesită un format de intrare fără ambiguitate. Ține URL-urile generate care conțin acreditări în afara jurnalelor obișnuite.