Transformați un URL de proxy HTTP într-un endpoint Twisted
Împărțiți un URL de proxy HTTP convențional în gazdă și port în loc să îl transmiteți ca gramatică de descriere a endpointului Twisted.
O valoare de proxy convențională precum http://proxy.example:8080 este un URL. clientFromString din Twisted acceptă o descriere de endpoint, precum tcp:host=proxy.example:port=8080. Cele două șiruri descriu informații înrudite cu gramatici diferite.
Dacă aplicația acceptă un URL de proxy HTTP convențional, împărțiți-l înainte de a crea endpointul:
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)
Fragmentul presupune că aplicația are deja reactorul său. Specificați portul real al proxyului în configurație atunci când nu este cel implicit al URL-ului HTTP. Lista de proxyuri HTTP oferă candidați de endpoint pentru o cerere HTTP publică permisă fără cont de proxy. HostnameEndpoint evită de asemenea încorporarea numelui de gazdă într-un alt șir de configurare delimitat prin două puncte.
Aceasta convertește doar intrarea de rutare. Acreditările încorporate într-un URL nu devin un antet de autorizare doar pentru că gazda și portul au fost împărțite. Furnizați orice autentificare de proxy acceptată necesară prin mecanismul de autentificare al cererii. Pentru o destinație HTTP simplă și un intermediar care oferă Basic, antetele de cerere Basic ale ProxyAgent oferă un astfel de mecanism.
Un URL de proxy HTTPS necesită o conexiune la proxy compatibilă cu TLS. Un URL SOCKS necesită negociere SOCKS. Niciunul nu este implementat prin trimiterea acelor scheme într-o conversie simplă de endpoint HTTP ProxyAgent.