from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Chiamate il metodo open proprio di questo opener quando una rotta appartiene alla sonda. L'endpoint HTTP dell'esempio può provenire dal vostro servizio o dalla lista di proxy HTTP per le sonde pubbliche. Il frammento illustra la proprietà; non definisce la politica completa di autenticazione o salute. Tenete qualsiasi gestore specifico dell'account collegato al client previsto.

urllib.request.install_opener() cambia il valore predefinito a livello di processo usato dalle chiamate urlopen() successive a livello di modulo. Un controllore che scorre i proxy può quindi lasciare che richieste non correlate usino il suo ultimo endpoint. Un'installazione temporanea e il ripristino durante la pulizia consentono comunque alle richieste concorrenti di essere eseguite durante la mutazione condivisa.

socket.setdefaulttimeout() modifica allo stesso modo i valori predefiniti per i socket creati successivamente. Usate il timeout a livello di operazione quando solo la sonda deve riceverlo.

Chiudete le risposte della sonda e mantenete i risultati specifici: una risposta di errore HTTP non è automaticamente un listener proxy morto. Se una sonda urllib sincrona viene usata in un servizio asincrono, spostate il lavoro bloccante su un worker adeguato; quella decisione di esecuzione non rende isolata la mutazione globale dell'opener.

Una sonda dovrebbe restituire la propria osservazione senza lasciare un'altra politica di rete dietro. Il suo oggetto client e l'operazione limitata rendono esplicito quel confine.

Articoli correlati