2009-06-23 21 views
6

Czy w sieci Python 2.6.1 jest obsługiwane proxy za pośrednictwem protokołu HTTPS?Czy program urllib2 w Pythonie 2.6.1 obsługuje proxy za pośrednictwem protokołu https

Znalazłem następujące w http://www.voidspace.org.uk/python/articles/urllib2.shtml:

NOTE

Currently urllib2 does not support fetching of https locations through a proxy. This can be a problem.

próbuję zautomatyzować logowanie się do strony internetowej i pobieranie dokumentów, mam prawidłową nazwę użytkownika/hasło.

proxy_info = { 
    'host':"axxx", # commented out the real data 
    'port':"1234" # commented out the real data 
} 

proxy_handler = urllib2.ProxyHandler(
       {"http" : "http://%(host)s:%(port)s" % proxy_info}) 
opener = urllib2.build_opener(proxy_handler, 
     urllib2.HTTPHandler(debuglevel=1),urllib2.HTTPCookieProcessor()) 
urllib2.install_opener(opener) 

fullurl = 'https://correct.url.to.login.page.com/user=a&pswd=b' # example 
req1 = urllib2.Request(url=fullurl, headers=headers) 
response = urllib2.urlopen(req1) 

miałem to działa na podobnych stronach, ale nie przy użyciu protokołu HTTPS i podejrzewam, że nie dostać przez pełnomocnika - to po prostu utknie w taki sam sposób, jak wtedy, gdy nie określił proxy. Muszę wyjść przez proxy.

Potrzebuję uwierzytelnienia, ale nie używając podstawowego uwierzytelnienia, urllib2 wykombinuje uwierzytelnianie podczas przechodzenia przez stronę https (dostarczam nazwę użytkownika/hasło do strony za pośrednictwem url)?

EDIT: Nie, ja testowałem z

proxies = { 
     "http" : "http://%(host)s:%(port)s" % proxy_info, 
     "https" : "https://%(host)s:%(port)s" % proxy_info 
    } 

    proxy_handler = urllib2.ProxyHandler(proxies) 

i dostaję błąd:

urllib2.URLError: urlopen error [Errno 8] _ssl.c:480: EOF occurred in violation of protocol

Odpowiedz

3

nie jestem pewien artykuł Michaela Foord jest, że cytujesz, jest aktualizowany do Pythona 2.6. 1 - czemu nie spróbować? Zamiast powiedzieć ProxyHandler, że proxy jest dobre tylko dla http, tak jak teraz, zarejestruj się również dla https (oczywiście powinieneś sformatować go w zmienną tylko raz przed wywołaniem ProxyHandler i po prostu wielokrotnie używać tej zmiennej w DICT), które mogą lub nie mogą działać, ale nie jesteś nawet próbuje, a to na pewnonie pracować -)

+0

Aaa, got it :) niech mi spróbować (btw mam zorientowali się, co było mi potrzebne z dyni, ale wciąż byłoby miło mieć to działa w Pythonie) – stefanB

+0

Niestety dodanie pełnomocnika jako „https” klucz w dict przechodzisz do ProxyHandler nie rozwiąże problemu jako AFAIK nie ma wsparcia dla metody CONNECT HTTP. Korzystanie z PyCurl jest najłatwiejszym rozwiązaniem, ale dla dystrybucji kodu brak obsługi Windows w PyCurl (lub przynajmniej łatwość instalacji) może być dużym utrudnieniem. – Tom

3

Okrywać ktoś inny ma ten problem w przyszłości chciałabym! zwróć uwagę, że obsługuje on teraz proxy proxy https, upewnij się, że proxy również je obsługuje lub ryzykujesz, że wpadniesz na błąd, który umieszcza bibliotekę Pythona w nieskończonej pętli (tak mi się stało).

Zobacz unittest w źródle Pythona, który testuje https proxy wsparcie dla dalszych informacji: http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

+0

+1 dziękuję za informacje – stefanB

+0

+1 za link do unittest w python źródło – charmoniumQ

6

Poprawiono w Pythonie 2.6.3 i kilka innych oddziałów:

  • _bugs. python.org/issue1424152 (zamień _ na http ...)
  • http://www.python.org/download/releases/2.6.3/NEWS.txt

    Problem # 1424152: Napraw protokół httplib, urllib2, aby obsługiwać protokół SSL podczas pracy z serwerem proxy . Oryginalna łata autorstwa Christophera Li, zmiany dokonane przez Senthil Kumaran.

+0

+1 dzięki za informacje – stefanB

Powiązane problemy