Urllib2 in Python 2.6.1 supporta proxy tramite https
Domanda
urllib2 in Python 2.6.1 supporta il proxy tramite https?
Ho trovato quanto segue in http://www.voidspace.org .uk / python / articoli / urllib2.shtml :
NOTE
Attualmente urllib2 non supporta recupero di posizioni https tramite a proxy. Questo può essere un problema.
Sto cercando di automatizzare l'accesso al sito Web e il download del documento, ho un nome utente / password validi.
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)
L'ho fatto funzionare per pagine simili ma non usando HTTPS e sospetto che non riesca a passare attraverso il proxy: rimane bloccato allo stesso modo di quando non ho specificato il proxy. Devo uscire tramite proxy.
Devo autenticarmi ma non usando l'autenticazione di base, urllib2 scoprirà l'autenticazione quando si accede tramite il sito https (fornisco nome utente / password al sito tramite url)?
EDIT: No, ho provato con
proxies = {
"http" : "http://%(host)s:%(port)s" % proxy_info,
"https" : "https://%(host)s:%(port)s" % proxy_info
}
proxy_handler = urllib2.ProxyHandler(proxies)
E ottengo l'errore:
urllib2.URLError: errore urlopen [Errno 8] _ssl.c: 480: EOF verificato in violazione del protocollo
Soluzione
Non sono sicuro che l'articolo di Michael Foord, che citi, sia aggiornato a Python 2.6.1 - perché non provarlo? Invece di dire a ProxyHandler che il proxy è buono solo per http, come stai facendo ora, registralo anche per https (ovviamente dovresti formattarlo in una variabile solo una volta prima di chiamare ProxyHandler e usare ripetutamente quella variabile nel dict): potrebbe non funzionare, ma non stai nemmeno provando , e questo è sicuro di non funzionare! -)
Altri suggerimenti
Risolto in Python 2.6.3 e diversi altri rami:
- _bugs.python.org/issue1424152 (sostituisci _ con http ...)
-
http://www.python.org/download /releases/2.6.3/NEWS.txt
Problema n. 1424152: risolto il problema con httplib, urllib2 per supportare SSL durante il lavoro proxy. Patch originale di Christopher Li, modifiche apportate da Senthil Kumaran.
Nel caso in cui qualcun altro abbia questo problema in futuro, vorrei sottolineare che ora supporta il proxy https, assicurati che anche il proxy lo supporti o rischi di imbatterti in un bug che mette la libreria Python in un ciclo infinito (questo è successo a me).
Vedi il unittest nella sorgente python che sta testando il supporto proxy https per ulteriori informazioni: http: //svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203