<div>Premessa, </div><div>anche se l'ho fatto funzionare... dubito delle API,</div><div><br></div><div>mi sono configurato un apache proxy digest</div><div><div><VirtualHost *:9999></div><div>    ServerName <a href="http://romilda.aldaran.org">romilda.aldaran.org</a></div>

<div>    ProxyRequests On</div><div>    <Proxy *> </div><div>        Order deny,allow </div><div>        Deny from all </div><div>        Allow from all</div><div>        AuthType Digest</div><div>        AuthName "private"</div>

<div>        AuthUserFile /etc/apache2/passwd-digest</div><div>        Require valid-user</div><div>    </Proxy></div><div></VirtualHost></div></div><div><br></div><div>dopodichè questo è il client python che riesce a leggere la mia pagina web tramite proxy </div>

<div><br></div><div>#! /usr/bin/python</div><div>import urllib2</div><div>proxy_url = r'<a href="http://localhost:9999/">http://localhost:9999/</a>'</div><div>proxy = urllib2.ProxyHandler({'http': proxy_url})</div>

<div>auth = urllib2.ProxyDigestAuthHandler()</div><div>#auth.add_password('private', proxy_url, 'user', 'gb')</div><div>auth.add_password('private', '<a href="http://janua.it:80">janua.it:80</a>', 'user', 'gb')</div>

<div>auth.add_password('private', '<a href="http://libera.scuola.steineriana.janua.it:80">libera.scuola.steineriana.janua.it:80</a>', 'user', 'gb')</div><div>opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)</div>

<div><br></div><div>urllib2.install_opener(opener)</div><div>conn = urllib2.urlopen('<a href="http://janua.it/">http://janua.it/</a>')</div><div>print conn.read()</div><div><br></div><div><br></div>come vedi ho commentato <br>


#auth.add_password('private', proxy_url, 'user', 'gb')<div><br></div><div>e ho aggiunto 2 linee per far funzionare l'esempio.</div><div>debuggando con pdb ho visto che in effetti il client ci riprova anche 5 volte se trova una 407, ma deve associare</div>

<div>correttamente utente e password con il realm.</div><div><br></div><div>il metodo incriminato di urllib2 è questo, che nel caso "commentato" ritorna None, None</div><div>indi per cui usciva con un secco 407 anche su wireshark non trovando user e password per il dominio richiesto.</div>

<div> </div><div><div>File:       /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py</div><div>Definition: auth.passwd.find_user_password(self, realm, authuri)</div><div>Source:</div><div>    def find_user_password(self, realm, authuri):</div>

<div>        domains = self.passwd.get(realm, {})</div><div>        for default_port in True, False:</div><div>            reduced_authuri = self.reduce_uri(authuri, default_port)</div><div>            for uris, authinfo in domains.iteritems():</div>

<div>                for uri in uris:</div><div>                    if self.is_suburi(uri, reduced_authuri):</div><div>                        return authinfo</div><div>        return None, None</div></div><div><br></div>

<div>a me questo add_password non mi piace per niente cosi :)</div><div>che senso ha definire una strategia diversa su un proxy a seconda del dominio da visitare? nessuna</div><div>immagino che le api sono pensate per siti web con autenticazione digest</div>

<div><br></div><div>consiglio questa strada:</div><div><br></div><div><div>#! /usr/bin/python</div><div>import urllib2</div><div><br></div><div>class MyHTTPPasswordMgr(urllib2.HTTPPasswordMgr):</div><div>    def find_user_password(self, realm, authuri):</div>

<div>        return "user", "gb"</div><div><br></div><div>proxy_url = r'<a href="http://localhost:9999/">http://localhost:9999/</a>'</div><div>proxy = urllib2.ProxyHandler({'http': proxy_url})</div>

<div>auth = urllib2.ProxyDigestAuthHandler(MyHTTPPasswordMgr())</div><div>opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)</div><div><br></div><div>urllib2.install_opener(opener)</div><div>conn = urllib2.urlopen('<a href="http://janua.it/">http://janua.it/</a>')</div>

<div>print conn.read()</div></div><div><br></div><div>ciao</div><div>S</div><div><br><br><div class="gmail_quote">2012/9/29 Simone Federici <span dir="ltr"><<a href="mailto:s.federici@gmail.com" target="_blank">s.federici@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">da quello che so io i proxy continuano a darti 407 finche non gli passi la autenticazione nel modo giusto.<div><br></div>

<div>secondo me sei sulla strada giusta e c'è un dettaglio che probabilmente ci sta sfuggendo.</div>
<div>non credo invece alla teoria che urlib2 sia bacata sul digest mentre funziona sul basic :-D</div><div> <br><div>mi piacerebbe darti una mano, hai un proxy pubblico e una utenza con cui fare le prove?</div><div><br></div>


<div>ciao</div><span class="HOEnZb"><font color="#888888"><div>S</div></font></span><div class="im"><div><br><br><div class="gmail_quote">2012/9/29 Pietro Battiston <span dir="ltr"><<a href="mailto:me@pietrobattiston.it" target="_blank">me@pietrobattiston.it</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>Grazie della dritta... io il realm lo conosco anche, ma dove dovrei<br>
darglielo?!<br>
<br>
In HTTPPasswordMgrWithDefaultRealm.add_password gliene posso dare uno,<br>
ma da quello che ho capito<br>
- serve solo a stabilire quali dati di autenticazione utilizzare a<br>
seconda del realm ricevuto nell'errore 407 (e None significa "per tutti<br>
i realm"), ed<br>
- è il realm ricevuto che dovrebbe essere utilizzato poi per<br>
l'autenticazione.<br>
<br>
In sintesi, da quel che ho capito è _normale_ che nel corso<br>
dell'autenticazione digest si riceva un 407. Non ho capito nulla?<br></div></blockquote></div><br></div></div></div>
</blockquote></div><br></div>