Gör en HTTP-proxy-URL till en Twisted-endpoint
Dela upp en vanlig HTTP-proxy-URL i värd och port i stället för att skicka den som Twisted-endpointbeskrivningens grammatik.
Ett vanligt proxyvärde som http://proxy.example:8080 är en URL. Twisted's clientFromString accepterar en endpointbeskrivning, som tcp:host=proxy.example:port=8080. De två strängarna beskriver besläktad information med olika grammatiker.
Om applikationen accepterar en vanlig HTTP-proxy-URL, dela upp den innan endpointen skapas:
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)
Utdraget förutsätter att applikationen redan har sin reactor. Ange den verkliga proxyporten i konfigurationen när den inte är HTTP-URL:ens standard. HTTP-proxylistan erbjuder endpointkandidater för en tillåten offentlig HTTP-förfrågan utan proxykonto. HostnameEndpoint undviker också att bädda in värdnamnet i en annan kolonavgränsad konfigurationssträng.
Detta konverterar bara routningsindata. Inloggningsuppgifter inbäddade i en URL blir inte en auktoriseringsheader bara för att värden och porten delades upp. Tillhandahåll eventuell nödvändig stödd proxyautentisering via förfrågans autentiseringsarrangemang. För ett vanligt HTTP-mål och en mellanhand som erbjuder Basic ger ProxyAgents Basic-förfrågningshuvuden ett sådant arrangemang.
En HTTPS-proxy-URL kräver en TLS-kapabel anslutning till proxyn. En SOCKS-URL kräver SOCKS-förhandling. Ingen av dem implementeras genom att skicka dessa scheman in i en vanlig HTTP-ProxyAgent-endpointkonvertering.