Für das IPv4-Format eines HTTP-Proxy-Anbieters ip:port:user:password wandeln Sie die Felder um, bevor Sie den Wert an Requests übergeben:

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}

Der begrenzte Split erhält alle zusätzlichen Doppelpunkte im Passwort. Nur Zeilenenden zu entfernen verhindert außerdem, dass Leerzeichen stillschweigend entfernt werden, die zu einem Zugangsdatum gehören könnten.

Kodieren Sie Benutzername und Passwort als getrennte URL-Komponenten. Ein @ in einem rohen Passwort darf nicht mit dem Trenner vor dem Proxy-Host verwechselt werden. Diese Funktion erwartet rohe Zugangsdaten; wer bereits kodierten Text übergibt, kann das Prozentzeichen erneut kodieren.

Die zurückgegebene Map wählt diesen Proxy für HTTP- und HTTPS-Ziele. Ein Schlüssel wie http://192.0.2.10 hat in Requests eine andere Bedeutung: Er wählt eine Route für diesen Zielhost. Es ist kein Index in einen Pool von Proxy-Servern.

Der Parser akzeptiert bewusst nur das genannte IPv4-Format. Er deckt keine Benutzernamen mit Doppelpunkten und keine IPv6-Adressen ohne Klammern ab; diese brauchen ein eindeutiges Eingabeformat. Halten Sie erzeugte URLs mit Zugangsdaten aus üblichen Protokollen heraus.

Ähnliche Artikel