Un valore proxy convenzionale come http://proxy.example:8080 è un URL. clientFromString di Twisted accetta una descrizione dell'endpoint, come tcp:host=proxy.example:port=8080. Le due stringhe descrivono informazioni correlate con grammatiche diverse.

Se l'applicazione accetta un URL di proxy HTTP convenzionale, analizzalo prima di creare l'endpoint:

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)

Il frammento presuppone che l'applicazione abbia già il suo reactor. Specifica la porta reale del proxy nella configurazione quando non è quella predefinita dell'URL HTTP. L'elenco di proxy HTTP offre candidati endpoint per una richiesta HTTP pubblica consentita senza account proxy. HostnameEndpoint evita anche di incorporare il nome host in un'altra stringa di configurazione delimitata da due punti.

Questo converte solo l'input di instradamento. Le credenziali incorporate in un URL non diventano un'intestazione di autorizzazione solo perché host e porta sono stati analizzati. Fornisci qualsiasi autenticazione proxy supportata richiesta tramite il meccanismo di autenticazione della richiesta. Per una destinazione HTTP semplice e un intermediario che offre Basic, le intestazioni di richiesta Basic di ProxyAgent forniscono uno di questi meccanismi.

Un URL di proxy HTTPS richiede una connessione al proxy compatibile con TLS. Un URL SOCKS richiede la negoziazione SOCKS. Nessuno dei due è implementato inviando tali schemi a una semplice conversione di endpoint HTTP ProxyAgent.

Articoli correlati