HTTP-proxy URL átalakítása Twisted-végponttá
Bontsa fel a hagyományos HTTP-proxy URL-t gazdagépre és portra ahelyett, hogy a Twisted végpontleíró nyelvtanaként adná át.
Egy hagyományos proxyérték, például http://proxy.example:8080, URL. A Twisted clientFromString függvénye végpontleírást fogad el, például tcp:host=proxy.example:port=8080. A két karakterlánc kapcsolódó információkat ír le különböző nyelvtanokkal.
Ha az alkalmazás hagyományos HTTP-proxy URL-t fogad el, a végpont létrehozása előtt bontsa fel:
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)
A részlet feltételezi, hogy az alkalmazásnak már van reactorja. Ha a port nem a HTTP URL alapértelmezettje, adja meg a tényleges proxyportot a konfigurációban. Az HTTP-proxylista végpontjelölteket kínál egy engedélyezett nyilvános HTTP-kéréshez proxyfiók nélkül. A HostnameEndpoint azt is elkerüli, hogy a gazdagépnevet egy másik kettősponttal tagolt konfigurációs karakterláncba ágyazza.
Ez csak az útválasztási bemenetet alakítja át. Az URL-be ágyazott hitelesítő adatok nem válnak engedélyezési fejléccé csak azért, mert a gazdagépet és a portot felbontották. A kért támogatott proxyhitelesítést a kérés hitelesítési elrendezésén keresztül biztosítsa. Egyszerű HTTP-cél és Basic szolgáltatást nyújtó közvetítő esetén a ProxyAgent Basic kérésfejlécei nyújtanak egy ilyen elrendezést.
Az HTTPS-proxy URL TLS-képes kapcsolatot igényel a proxyhoz. A SOCKS URL SOCKS-tárgyalást igényel. Egyiket sem úgy valósítják meg, hogy ezeket a sémákat egy egyszerű HTTP ProxyAgent végpontátalakításba küldik.