2012-08-01 24 views
12

Sto cercando di aprire un sito web (sono dietro un proxy aziendale) utilizzando urllib.request.urlopen(), ma sto ottenendo l'errore:Python 3 - urllib, errore HTTP 407: Autenticazione proxy richiesta

urllib.error.HTTPError: HTTP Error 407: Proxy Authentication Required 

Posso trovare il proxy in urllib.request.getproxies(), ma come posso specificare un nome utente e una password da utilizzare per questo? Non sono riuscito a trovare la soluzione nei documenti ufficiali.

+0

Hai visto http://stackoverflow.com/questions/34079/how-to-specify-an-authenticated-proxy-for-a-python-http-connection? Esempi nella parte inferiore di http://docs.python.org/library/urllib2.html#urllib2-esamples. – katrielalex

+0

Sì, ma questo è per Python2.7 Non hanno ristrutturato l'intero pacchetto urllib in Python3 3? – Lanaru

+1

Non hanno fondamentalmente cambiato l'interfaccia, ma hanno spostato le cose un po '. 'ProxyHandler' ora vive in [' urllib.request.ProxyHandler'] (http://docs.python.org/release/3.0.1/library/urllib.request.html#urllib.request.ProxyHandler) – katrielalex

risposta

21
import urllib.request as req 

proxy = req.ProxyHandler({'http': r'http://username:[email protected]:port'}) 
auth = req.HTTPBasicAuthHandler() 
opener = req.build_opener(proxy, auth, req.HTTPHandler) 
req.install_opener(opener) 
conn = req.urlopen('http://google.com') 
return_str = conn.read() 
+3

Grazie. Non c'è modo di farlo senza fornire nome utente e password? –

+3

Se sei preoccupato che le credenziali siano codificate nel codice sorgente (e quindi perdano in git o altri artefatti VCS e così via), l'approccio migliore è usare qualcosa come configparser, o YAML o JSON, per archiviare il credenziali nel proprio file separato. Crea dinamicamente l'URL ProxyHandler dalle impostazioni di configurazione. Ciò consente alle fonti di essere leggibili mantenendo le credenziali riservate. –

+1

Una nota minore: per me, dove ha "@url: port", in realtà ho usato il nome della macchina "@machine: port", non un URL completo. – mcherm

Problemi correlati