[Python] Problema con proxy
Simone Federici
s.federici a gmail.com
Dom 30 Set 2012 00:52:31 CEST
Premessa,
anche se l'ho fatto funzionare... dubito delle API,
mi sono configurato un apache proxy digest
<VirtualHost *:9999>
ServerName romilda.aldaran.org
ProxyRequests On
<Proxy *>
Order deny,allow
Deny from all
Allow from all
AuthType Digest
AuthName "private"
AuthUserFile /etc/apache2/passwd-digest
Require valid-user
</Proxy>
</VirtualHost>
dopodichè questo è il client python che riesce a leggere la mia pagina web
tramite proxy
#! /usr/bin/python
import urllib2
proxy_url = r'http://localhost:9999/'
proxy = urllib2.ProxyHandler({'http': proxy_url})
auth = urllib2.ProxyDigestAuthHandler()
#auth.add_password('private', proxy_url, 'user', 'gb')
auth.add_password('private', 'janua.it:80', 'user', 'gb')
auth.add_password('private', 'libera.scuola.steineriana.janua.it:80',
'user', 'gb')
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://janua.it/')
print conn.read()
come vedi ho commentato
#auth.add_password('private', proxy_url, 'user', 'gb')
e ho aggiunto 2 linee per far funzionare l'esempio.
debuggando con pdb ho visto che in effetti il client ci riprova anche 5
volte se trova una 407, ma deve associare
correttamente utente e password con il realm.
il metodo incriminato di urllib2 è questo, che nel caso "commentato"
ritorna None, None
indi per cui usciva con un secco 407 anche su wireshark non trovando user e
password per il dominio richiesto.
File:
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py
Definition: auth.passwd.find_user_password(self, realm, authuri)
Source:
def find_user_password(self, realm, authuri):
domains = self.passwd.get(realm, {})
for default_port in True, False:
reduced_authuri = self.reduce_uri(authuri, default_port)
for uris, authinfo in domains.iteritems():
for uri in uris:
if self.is_suburi(uri, reduced_authuri):
return authinfo
return None, None
a me questo add_password non mi piace per niente cosi :)
che senso ha definire una strategia diversa su un proxy a seconda del
dominio da visitare? nessuna
immagino che le api sono pensate per siti web con autenticazione digest
consiglio questa strada:
#! /usr/bin/python
import urllib2
class MyHTTPPasswordMgr(urllib2.HTTPPasswordMgr):
def find_user_password(self, realm, authuri):
return "user", "gb"
proxy_url = r'http://localhost:9999/'
proxy = urllib2.ProxyHandler({'http': proxy_url})
auth = urllib2.ProxyDigestAuthHandler(MyHTTPPasswordMgr())
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://janua.it/')
print conn.read()
ciao
S
2012/9/29 Simone Federici <s.federici a gmail.com>
> da quello che so io i proxy continuano a darti 407 finche non gli passi la
> autenticazione nel modo giusto.
>
> secondo me sei sulla strada giusta e c'è un dettaglio che probabilmente ci
> sta sfuggendo.
> non credo invece alla teoria che urlib2 sia bacata sul digest mentre
> funziona sul basic :-D
>
> mi piacerebbe darti una mano, hai un proxy pubblico e una utenza con cui
> fare le prove?
>
> ciao
> S
>
>
> 2012/9/29 Pietro Battiston <me a pietrobattiston.it>
>
>> Grazie della dritta... io il realm lo conosco anche, ma dove dovrei
>> darglielo?!
>>
>> In HTTPPasswordMgrWithDefaultRealm.add_password gliene posso dare uno,
>> ma da quello che ho capito
>> - serve solo a stabilire quali dati di autenticazione utilizzare a
>> seconda del realm ricevuto nell'errore 407 (e None significa "per tutti
>> i realm"), ed
>> - è il realm ricevuto che dovrebbe essere utilizzato poi per
>> l'autenticazione.
>>
>> In sintesi, da quel che ho capito è _normale_ che nel corso
>> dell'autenticazione digest si riceva un 407. Non ho capito nulla?
>>
>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120930/3198400b/attachment.html>
Maggiori informazioni sulla lista
Python