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.

Articole similare