2011-01-31 9 views
5

Próbuję uzyskać dostęp do strony internetowej zza zapory korporacyjnej przy użyciu poniżej: -strony internetowe otwierane za pomocą urllib2 zza firmowym firewallem - 11004 getaddrinfo udało

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') 

Pierwsze error

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

Próbowałem z różne procedury obsługi (wypróbowane ProxyHandler również w nieco inny sposób), ale nie działa.

Jakieś wskazówki na temat tego, co może być przyczyną błędu i innych sposobów dostarczania referencji i sprawienia, by działało?

+0

Jaki rodzaj uwierzytelniania ma pełnomocnik ma? Jeśli wymaga 'Proxy-Authenticate: NTLM', to nie da się go uruchomić z Pythonem, przykro mi to mówić. –

Odpowiedz

5

Jeśli używasz serwera proxy, a ten serwer proxy ma nazwę użytkownika i hasło (które wiele firmowych serwerów proxy posiada), musisz ustawić obsługę proxy za pomocą 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 wykorzystywana jest do poświadczenia dla miejsca, które masz zamiar uzyskać dostęp, a nie do przechodzenia przez pełnomocnika. Powyższy fragment może ci pomóc.

+0

Próbowałem już tego, ale dało to Http 401 Brak autoryzacji jako błąd. Podejrzewam, że mój korporacyjny proxy to NTLM i powyższe metody mogą nie wystarczyć. –

+0

Spróbuj użyć http://code.google.com/p/python-ntlm/ Spróbuj również z sugestią pod tym linkiem: http://stackoverflow.com/questions/1481398/python-urllib2-https-and-proxy -ntlm-authentication/1793206 # 1793206 Jeśli oba te działania i zwykły urllib2 nie, prosimy o przesłanie raportu z bugs.python.org, jeśli jeszcze nie jest obecny. Zgadnij, trzeba nad tym pracować. –

+0

python-ntlm nie pomógł - podał ten sam błąd getaddinfo. Spróbuje pycurl. Wielkie dzięki za wskazówki. –

4

W systemie Windows zaobserwowałem, że pyton korzysta z ustawień IE Internet Options-> LAN Settings. Więc nawet jeśli użyjemy urllib2 do zainstalowania opener i określenia proxy_url, to będzie nadal używać ustawień IE.

to działało dobrze w końcu, kiedy eksportowane zmienną systemową:

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

zadzwoń do mnie głupim, ale wyeksportowałem gdzie i jak? Czy uruchomiłeś to w linii poleceń? Jeśli tak, zakładam, używając 'set'? – jamiet