2009-06-23 4 views
6

urllib2 in Python 2.6.1 proxy di supporto tramite https?urllib2 in Python 2.6.1 supporta il proxy tramite https

ho trovato quanto segue al 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.

sto cercando di automatizzare login per sito web e il download di documenti, ho valida username/password.

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 avuto a lavorare per pagine simili, ma non tramite HTTPS e ho il sospetto che non ottiene mediante delega - semplicemente si blocca nello stesso modo come quando non ha specificato proxy. Devo uscire per procura.

Ho bisogno di autenticarsi ma non usare l'autenticazione di base, urllib2 capiremo l'autenticazione quando si passa attraverso il sito https (fornisco username/password al sito via url)?

EDIT: No, ho testato 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: urlopen error [Errno 8] _ssl.c:480: EOF occurred in violation of protocol

risposta

3

non sono sicuro che l'articolo di Michael Foord, che lei cita, viene aggiornato per Python 2.6. 1 - perché non provarlo? Invece di dire a ProxyHandler che il proxy è valido 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): che possono o non possono lavorare, ma, non sei nemmeno provare, e questo è sicuro di non lavorare -)

+0

Aaah, capito :) fammi provare (btw ho capito quello che mi serviva con l'arricciatura ma comunque sarebbe bello avere in esecuzione in python) – stefanB

+0

Purtroppo l'aggiunta del proxy come il tasto 'https' nel dettato che passi a ProxyHandler non risolverà il problema come AFAIK non c'è supporto per il metodo HTTP CONNECT. L'utilizzo di PyCurl è la soluzione più semplice, ma per la distribuzione del codice la mancanza del supporto di Windows in PyCurl (o almeno la facilità di installazione) può rappresentare un grosso ostacolo. – Tom

3

Incase chiunque altro avere questo problema in futuro mi piacerebbe! Fai notare che ora supporta https proxying, assicurati che anche il proxy lo supporti o rischi di imbattersi in un bug che mette la libreria Python in un loop infinito (questo è successo a me).

Vedere la unittest nell'origine pitone che sta testando https proxy supporto per ulteriori informazioni: http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

+0

+1 grazie per le informazioni – stefanB

+0

+1 per il collegamento a un unittest nella sorgente python – charmoniumQ

6

fissati in Python 2.6.3 e molti altri rami:

  • _bugs. python.org/issue1424152 (sostituisci _ con http ...)
  • http://www.python.org/download/releases/2.6.3/NEWS.txt

    numero # 1424152: Correzione per httplib, urllib2 per supportare SSL mentre si utilizza il proxy . Patch originale di Christopher Li, modifiche apportate da Senthil Kumaran.

+0

+1 grazie per le informazioni – stefanB