Gjør en HTTP-proxy-URL om til et Twisted-endepunkt
Del en vanlig HTTP-proxy-URL opp i vert og port i stedet for å sende den som Twisted-endepunktbeskrivelsens grammatikk.
En vanlig proxyverdi som http://proxy.example:8080 er en URL. Twisted sin clientFromString godtar en endepunktbeskrivelse, som tcp:host=proxy.example:port=8080. De to strengene beskriver beslektet informasjon med forskjellige grammatikker.
Hvis applikasjonen godtar en vanlig HTTP-proxy-URL, del den opp før endepunktet opprettes:
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)
Utdraget forutsetter at applikasjonen allerede har sin reactor. Angi den virkelige proxyporten i konfigurasjonen når den ikke er HTTP-URL-ens standard. HTTP-proxylisten tilbyr endepunktkandidater for en tillatt offentlig HTTP-forespørsel uten proxykonto. HostnameEndpoint unngår også å bygge vertsnavnet inn i en annen kolonadelt konfigurasjonsstreng.
Dette konverterer bare rutinginndataene. Legitimasjon som er bygget inn i en URL, blir ikke en autorisasjonsheader bare fordi verten og porten ble delt opp. Oppgi eventuell påkrevd støttet proxyautentisering gjennom forespørselens autentiseringsopplegg. For et vanlig HTTP-mål og en mellommann som tilbyr Basic, gir ProxyAgents Basic-forespørselsheadere et slikt opplegg.
En HTTPS-proxy-URL krever en TLS-kapabel forbindelse til proxyen. En SOCKS-URL krever SOCKS-forhandling. Ingen av dem implementeres ved å sende disse skjemaene inn i en vanlig HTTP-ProxyAgent-endepunktkonvertering.