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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top