Preveďte URL HTTP proxy na koncový bod Twisted
Rozdeľte bežnú URL HTTP proxy na hostiteľa a port namiesto toho, aby ste ju odovzdávali ako gramatiku opisu koncového bodu v Twisted.
Bežná hodnota proxy, napríklad http://proxy.example:8080, je URL. clientFromString v Twisted prijíma opis koncového bodu, napríklad tcp:host=proxy.example:port=8080. Oba reťazce opisujú súvisiace informácie rôznymi gramatikami.
Ak aplikácia prijíma bežnú URL HTTP proxy, rozdeľte ju pred vytvorením koncového bodu:
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)
Úryvok predpokladá, že aplikácia už má svoj reactor. Ak port nie je predvolený pre URL HTTP, uveďte v konfigurácii skutočný port proxy. Zoznam HTTP proxy ponúka kandidátov na koncové body pre povolenú verejnú HTTP požiadavku bez účtu proxy. HostnameEndpoint sa tiež vyhýba vloženiu názvu hostiteľa do ďalšieho konfiguračného reťazca oddeleného dvojbodkami.
Toto prevádza iba vstup na smerovanie. Prihlasovacie údaje vložené do URL sa nestanú autorizačnou hlavičkou len preto, že hostiteľ a port boli rozdelené. Zabezpečte akékoľvek požadované podporované overenie proxy prostredníctvom mechanizmu overenia požiadavky. Pre jednoduchý cieľ HTTP a sprostredkovateľa ponúkajúceho Basic poskytujú hlavičky požiadavky Basic v ProxyAgent jedno takéto riešenie.
URL proxy HTTPS vyžaduje pripojenie k proxy schopné TLS. URL SOCKS vyžaduje vyjednávanie SOCKS. Ani jedno sa neimplementuje odoslaním týchto schém do jednoduchej konverzie koncového bodu HTTP ProxyAgent.