2011-01-31 16 views
5

Sto cercando di accedere ad un sito web da dietro firewall aziendale usando sotto: -siti di apertura utilizzando urllib2 da dietro firewall aziendale - 11004 getaddrinfo fallito

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
password_mgr.add_password(None, url, username, password) 
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr) 
opener = urllib2.build_opener(auth_handler) 
urllib2.install_opener(opener) 
conn = urllib2.urlopen('http://python.org') 

Ottenere errore

URLError: <urlopen error [Errno 11004] getaddrinfo failed> 

ho provato con diversi gestori (provato ProxyHandler anche in modo leggermente diverso), ma non sembra funzionare.

Eventuali indizi su quale potrebbe essere il motivo dell'errore e su altri modi di fornire le credenziali e farlo funzionare?

+0

Che tipo di autenticazione ritiene la procura vuole? Se richiede 'Proxy-Authenticate: NTLM', allora è impossibile farlo funzionare con Python, mi dispiace dirlo. –

risposta

5

Se si utilizza Proxy e tale proxy ha nome utente e password (che hanno molti proxy aziendali), è necessario impostare il gestore proxy con urllib2.

proxy_url = 'http://' + proxy_user + ':' + proxy_password + '@' + proxy_ip 
    proxy_support = urllib2.ProxyHandler({"http":proxy_url}) 
    opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler) 
    urllib2.install_opener(opener) 

HTTPBasicAuthHandler viene utilizzato per fornire le credenziali per il sito che si sta per accedere e non per passare attraverso il proxy. Lo snippet sopra riportato potrebbe aiutarti.

+0

Ho già provato questo, ma ha dato Http 401 non autorizzato come errore. Sospetto che il mio proxy aziendale sia NTLM e che i metodi di cui sopra potrebbero non essere sufficienti. –

+0

Prova con http://code.google.com/p/python-ntlm/ Prova anche con il suggerimento in questo link, http://stackoverflow.com/questions/1481398/python-urllib2-https-and-proxy -ntlm-authentication/1793206 # 1793206 Se entrambi funzionano e non urllib2 non funziona, si prega di presentare un rapporto con bugs.python.org, se non già presente. Indovina, deve essere lavorato su. –

+0

python-ntlm non ha aiutato - ha dato lo stesso errore getaddinfo. Proverò pycurl. Grazie mille per i suggerimenti. –

4

Su Windows, ho osservato che Python utilizza le impostazioni IE Internet Options-> LAN Settings. Quindi, anche se utilizziamo urllib2 per installare l'apertura e specificare proxy_url, continuerebbe a utilizzare le impostazioni di IE.

ha funzionato bene alla fine, quando ho esportato una variabile di sistema:

http_proxy=http://userid:[email protected]:port 
+1

chiamami stupido ma esporta dove e come? Hai eseguito questo alla riga di comando? Se è così, presumo l'uso di 'set'? – jamiet

Problemi correlati