Converteix un URL de servidor intermediari HTTP en un punt final de Twisted
Descompon un URL convencional de servidor intermediari HTTP en amfitrió i port en lloc de passar-lo com a gramàtica de descripció de punt final de Twisted.
Un valor de servidor intermediari convencional com http://proxy.example:8080 és un URL. El clientFromString de Twisted accepta una descripció de punt final, com tcp:host=proxy.example:port=8080. Les dues cadenes descriuen informació relacionada amb gramàtiques diferents.
Si l'aplicació accepta un URL convencional de servidor intermediari HTTP, descompon-lo abans de crear el punt final:
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)
El fragment assumeix que l'aplicació ja té el seu reactor. Especifica el port real del servidor intermediari a la configuració quan no sigui el predeterminat de l'URL HTTP. La llista de servidors intermediaris HTTP ofereix candidats a punt final per a una sol·licitud HTTP pública permesa sense compte de servidor intermediari. HostnameEndpoint també evita incrustar el nom d'amfitrió en una altra cadena de configuració delimitada per dos punts.
Això només converteix l'entrada d'encaminament. Les credencials incrustades en un URL no es converteixen en una capçalera d'autorització pel simple fet d'haver descompost l'amfitrió i el port. Proporciona qualsevol autenticació de servidor intermediari admesa mitjançant el mecanisme d'autenticació de la sol·licitud. Per a una destinació HTTP simple i un intermediari que ofereixi Basic, les capçaleres de sol·licitud Basic de ProxyAgent ofereixen un mecanisme així.
Un URL de servidor intermediari HTTPS requereix una connexió al servidor intermediari compatible amb TLS. Un URL SOCKS requereix negociació SOCKS. Cap dels dos s'implementa enviant aquests esquemes a una conversió simple de punt final HTTP ProxyAgent.