Uobičajena vrijednost proxyja poput http://proxy.example:8080 jest URL. Twistedov clientFromString prihvaća opis endpointa, poput tcp:host=proxy.example:port=8080. Dva niza opisuju povezane informacije različitim gramatikama.

Ako aplikacija prihvaća 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. Popis 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 usmjeravanje. Vjerodajnice ugrađene u URL ne postaju autorizacijsko zaglavlje samo zato što su host i port razdvojeni. Osigurajte bilo koju potrebnu podržanu autentifikaciju proxyja kroz mehanizam autentifikacije zahtjeva. Za obično HTTP odredište i posrednika koji nudi Basic, ProxyAgentova Basic zaglavlja zahtjeva pružaju jedan takav mehanizam.

HTTPS proxy URL zahtijeva vezu s proxyjem koja podržava TLS. SOCKS URL zahtijeva SOCKS pregovaranje. Nijedno se ne implementira slanjem tih shema u običnu konverziju endpointa HTTP ProxyAgent.

Povezani članci