[Python] problema urllib2 mechanize e proxy

admin lewis adminlewis a gmail.com
Lun 3 Ott 2011 13:22:05 CEST


Salve,
mi sono appena iscritto e non sono un programmatore prof.
Ho questo problema che a me sembra un bug.. in uno script utilizzo
mechanize, che a sua volta si appoggia a urllib2, per navigare in un
sito previa autenticazione e scaricare dei file pdf.
Questo script ha diversi anni .. tipo 3 o 4 e ha *sempre* funzionato.
Ultimamente ha smesso di funzionare a mio avviso perché il sito ha
cambiato sistema di autenticazione oppure perché aggiornando il proxy
è stato introdotto un bug.
Quindi fra il mio script ed internet c'è un proxy che dall'interno è
dansguardian(lan:8080)+squid(local:3128). Lo script senza proxy
funziona perfettamente e per varie ragioni non posso intervenire sulle
regole del firewall. Ovviamente se disabilito il proxy sullo script il
firewall non mi fa uscire.
È possibile che il bug riguardi il proxy ma intanto chiedo qui.
Dunque la seguente è parte dello script:

a = mechanize.Browser()
a.set_proxies({"http":"192.168.1.250:8080","https":"192.168.1.250:8080"})
a.addheaders = [('User-Agent', 'Firefox')]
a.open(url)
a.select_form(name="RepPre")
a["userid"] = login
a["userpw"] = passwd
r = a.submit()


e il seguente è l'errore:

Traceback (most recent call last):
  File "/usr/local/bin/get-0.1.py", line 67, in ?
    r = a.submit()
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 547, in submit
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 209, in open
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 236,
in _mech_open
  File "build/bdist.linux-i686/egg/mechanize/_opener.py", line 191, in open
  File "/usr/lib/python2.4/urllib2.py", line 376, in _open
    '_open', req)
  File "/usr/lib/python2.4/urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "build/bdist.linux-i686/egg/mechanize/_http.py", line 756, in https_open
  File "build/bdist.linux-i686/egg/mechanize/_http.py", line 706, in do_open
urllib2.URLError: <urlopen error (8, 'EOF occurred in violation of protocol')>

Il sito è in chiaro ma l'autenticazione passa in https.
il set_proxies l'ho introdotto recentemente in seguito all'errore..
prima semplicemente esportavo la variabile http_proxy da uno script
bash e quindi lanciavo lo script python.

Versioni
python 2.4.3
>>> print mechanize.__version__
(0, 1, 11, None, None)
>>> print urllib2.__version__
2.4

Ho già provato a postare sulla ml di mechanize. Ma non mi hanno saputo aiutare.
Grazie per ogni suggerimento.
ciao
luigi


-- 
Linux Server, Microsoft Windows 2003/2008 Server, Exchange 2007
http://predellino.blogspot.com/


Maggiori informazioni sulla lista Python