Eine HTTP-Proxy-URL in einen Twisted-Endpunkt umwandeln
Eine herkömmliche HTTP-Proxy-URL in Host und Port zerlegen, statt sie als Endpunktbeschreibungs-Grammatik von Twisted zu übergeben.
Ein herkömmlicher Proxy-Wert wie http://proxy.example:8080 ist eine URL. Twisted’s clientFromString akzeptiert eine Endpunktbeschreibung wie tcp:host=proxy.example:port=8080. Die beiden Zeichenketten beschreiben verwandte Informationen mit unterschiedlichen Grammatiken.
Wenn die Anwendung eine herkömmliche HTTP-Proxy-URL annimmt, zerlegen Sie sie, bevor der Endpunkt erstellt wird:
import os
from urllib.parse import urlsplit
from twisted.internet.endpoints import HostnameEndpoint
from twisted.web.client import ProxyAgent
proxy = urlsplit(os.environ['http_proxy'])
if proxy.scheme != 'http' or not proxy.hostname:
raise ValueError('Expected an HTTP proxy URL')
port = proxy.port if proxy.port is not None else 80
endpoint = HostnameEndpoint(reactor, proxy.hostname, port, timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Das Fragment setzt voraus, dass die Anwendung ihren Reaktor bereits besitzt. Geben Sie den tatsächlichen Proxy-Port in der Konfiguration an, wenn er nicht dem Standard der HTTP-URL entspricht. Die HTTP-Proxy-Liste bietet Endpunktkandidaten für eine erlaubte öffentliche HTTP-Anfrage ohne Proxy-Konto. HostnameEndpoint vermeidet außerdem, den Hostnamen in eine weitere durch Doppelpunkte getrennte Konfigurationszeichenkette einzubetten.
Dies wandelt nur die Routing-Eingabe um. In einer URL eingebettete Anmeldedaten werden nicht allein dadurch zu einem Autorisierungsheader, dass Host und Port zerlegt wurden. Stellen Sie jede erforderliche unterstützte Proxy-Authentifizierung über die Authentifizierungsvereinbarung der Anfrage bereit. Für ein einfaches HTTP-Ziel und einen Vermittler, der Basic anbietet, bietet ProxyAgents Basic-Anfrageheader eine solche Vereinbarung.
Eine HTTPS-Proxy-URL erfordert eine TLS-fähige Verbindung zum Proxy. Eine SOCKS-URL erfordert SOCKS-Aushandlung. Keines von beiden wird dadurch umgesetzt, dass diese Schemata in eine einfache HTTP-ProxyAgent-Endpunktkonvertierung gegeben werden.