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.

Relaterade artiklar