Converte un URL de proxy HTTP nun punto final de Twisted
Divide un URL de proxy HTTP convencional en host e porto en lugar de pasalo como a gramática de descrición de punto final de Twisted.
Un valor de proxy convencional como http://proxy.example:8080 é un URL. clientFromString de Twisted acepta unha descrición de punto final, como tcp:host=proxy.example:port=8080. As dúas cadeas describen información relacionada con gramáticas distintas.
Se a aplicación acepta un URL de proxy HTTP convencional, divídeo antes de crear o 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)
O fragmento supón que a aplicación xa ten o seu reactor. Especifica o porto real do proxy na configuración cando non sexa o predeterminado do URL HTTP. A lista de proxies HTTP ofrece candidatos de punto final para unha solicitude HTTP pública permitida sen conta de proxy. HostnameEndpoint tamén evita incrustar o nome de host noutra cadea de configuración delimitada por dous puntos.
Isto converte só a entrada de enrutamento. As credenciais incrustadas nun URL non se converten nunha cabeceira de autorización só porque se dividiron o host e o porto. Proporciona calquera autenticación de proxy compatible requirida mediante o mecanismo de autenticación da solicitude. Para un destino HTTP simple e un intermediario que ofreza Basic, as cabeceiras de solicitude Basic de ProxyAgent ofrecen un deses mecanismos.
Un URL de proxy HTTPS require unha conexión ao proxy compatible con TLS. Un URL SOCKS require negociación SOCKS. Ningún dos dous se implementa enviando eses esquemas a unha conversión simple de punto final HTTP ProxyAgent.