Pretvorite HTTP proxy URL u Twisted endpoint
Razdvojite uobičajeni HTTP proxy URL na host i port umjesto da ga prosljeđujete kao gramatiku opisa endpointa u Twistedu.
Uobičajena vrijednost proxyja kao što je http://proxy.example:8080 je URL. Twistedov clientFromString prihvata opis endpointa, poput tcp:host=proxy.example:port=8080. Dva niza opisuju povezane informacije različitim gramatikama.
Ako aplikacija prihvata uobičajeni HTTP proxy URL, razdvojite ga prije stvaranja endpointa:
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)
Isječak pretpostavlja da aplikacija već ima svoj reactor. Navedite stvarni port proxyja u konfiguraciji kada nije zadani za HTTP URL. Lista HTTP proxyja nudi kandidate za endpoint za dopušteni javni HTTP zahtjev bez proxy računa. HostnameEndpoint također izbjegava ugrađivanje imena hosta u drugi konfiguracijski niz odvojen dvotočkama.
Ovo pretvara samo ulaz za rutiranje. Akreditivi ugrađeni u URL ne postaju autorizacijsko zaglavlje samo zato što su host i port razdvojeni. Osigurajte bilo koju potrebnu podržanu autentifikaciju proxyja kroz aranžman autentifikacije zahtjeva. Za obično HTTP odredište i posrednika koji nudi Basic, ProxyAgentova Basic zaglavlja zahtjeva pružaju jedan takav aranžman.
HTTPS proxy URL zahtijeva vezu s proxyjem koja podržava TLS. SOCKS URL zahtijeva SOCKS pregovaranje. Nijedno se ne implementira slanjem tih šema u običnu konverziju endpointa HTTP ProxyAgent.