Python urllib: disattivare i proxy per un solo opener
Crea un opener urllib con connessione diretta usando ProxyHandler({}), senza modificare gli altri client né l’ambiente del processo.
Passa una mappatura vuota a ProxyHandler quando un solo opener di urllib deve connettersi direttamente:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Il dizionario vuoto non fornisce percorsi proxy. Se ometti la mappatura, il gestore scopre invece i proxy dall’ambiente e dalle impostazioni della piattaforma. Queste due costruzioni esprimono politiche differenti.
L’esempio usa la libreria standard di Python e mantiene la normale verifica HTTPS. Il blocco with chiude la risposta, anche quando un’eccezione provoca l’uscita dal blocco.
Richieste dirette e tramite proxy nella stessa applicazione
Due opener possono rappresentare le due politiche senza cambiare variabili d’ambiente tra le chiamate:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
Sostituisci l’indirizzo di loopback con il tuo proxy HTTP oppure scegli un candidato dall’elenco dei proxy HTTP per il confronto tramite proxy. Può trasportare la connessione alla destinazione HTTPS tramite CONNECT quando il servizio lo consente. Il protocollo e l’autenticazione supportati dal listener devono essere compatibili con il gestore.
Lascia intatto l’opener predefinito
Chiama direct.open o proxied.open tramite l’oggetto responsabile del percorso. install_opener cambia il valore predefinito dell’intero processo usato dalle funzioni di comodo di urllib; una libreria che lo usa può quindi influenzare codice estraneo. Non serve per l’opener isolato precedente.
L’argomento timeout è un’impostazione dell’operazione, non una scadenza in tempo reale che copre l’intero trasferimento. Leggi solo i dati necessari e usa una scadenza di livello superiore se il lavoro ha un limite totale rigoroso.
Questi oggetti opener non modificano il client di un’altra libreria, un processo esistente o le impostazioni proxy di un browser.