Een HTTP-proxy-URL omzetten in een Twisted-endpoint
Splits een conventionele HTTP-proxy-URL in host en poort in plaats van hem door te geven als de endpointbeschrijvingsgrammatica van Twisted.
Een conventionele proxywaarde zoals http://proxy.example:8080 is een URL. De clientFromString van Twisted accepteert een endpointbeschrijving, zoals tcp:host=proxy.example:port=8080. De twee strings beschrijven verwante informatie met verschillende grammatica's.
Als de toepassing een conventionele HTTP-proxy-URL accepteert, splits deze dan voordat het endpoint wordt gemaakt:
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)
Het fragment gaat ervan uit dat de toepassing al zijn reactor heeft. Geef de werkelijke proxypoort op in de configuratie wanneer deze niet de standaard van de HTTP-URL is. De HTTP-proxylijst biedt endpointkandidaten voor een toegestaan openbaar HTTP-verzoek zonder proxyaccount. HostnameEndpoint vermijdt ook dat de hostnaam in een andere door dubbele punten gescheiden configuratiestring wordt ingebed.
Dit converteert alleen de routeringsinvoer. Inloggegevens die in een URL zijn ingebed, worden niet zomaar een autorisatieheader omdat de host en poort zijn gesplitst. Lever eventueel vereiste ondersteunde proxyauthenticatie via de authenticatieregeling van het verzoek. Voor een gewoon HTTP-doel en een tussenpersoon die Basic aanbiedt, bieden de Basic-verzoekheaders van ProxyAgent een dergelijke regeling.
Een HTTPS-proxy-URL vereist een TLS-capabele verbinding met de proxy. Een SOCKS-URL vereist SOCKS-onderhandeling. Geen van beide wordt geïmplementeerd door die schema's in een gewone HTTP-ProxyAgent-endpointconversie te sturen.