Convierte una URL de proxy HTTP en un punto final de Twisted
Divide una URL de proxy HTTP convencional en host y puerto en lugar de pasarla como la gramática de descripción de punto final de Twisted.
Un valor de proxy convencional como http://proxy.example:8080 es una URL. clientFromString de Twisted acepta una descripción de punto final, como tcp:host=proxy.example:port=8080. Las dos cadenas describen información relacionada con gramáticas distintas.
Si la aplicación acepta una URL de proxy HTTP convencional, divídela antes de crear el punto 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 fragmento supone que la aplicación ya tiene su reactor. Especifica el puerto real del proxy en la configuración cuando no sea el predeterminado de la URL HTTP. La lista de proxies HTTP ofrece candidatos de punto final para una solicitud HTTP pública permitida sin cuenta de proxy. HostnameEndpoint también evita incrustar el nombre de host en otra cadena de configuración delimitada por dos puntos.
Esto convierte solo la entrada de enrutamiento. Las credenciales incrustadas en una URL no se convierten en un encabezado de autorización solo porque se dividieron el host y el puerto. Proporciona cualquier autenticación de proxy compatible que se requiera mediante el mecanismo de autenticación de la solicitud. Para un destino HTTP simple y un intermediario que ofrezca Basic, los encabezados de solicitud Basic de ProxyAgent ofrecen uno de esos mecanismos.
Una URL de proxy HTTPS requiere una conexión al proxy compatible con TLS. Una URL SOCKS requiere negociación SOCKS. Ninguno se implementa enviando esos esquemas a una conversión simple de punto final HTTP ProxyAgent.