[Python] Problema con proxy

Pietro Battiston me a pietrobattiston.it
Ven 28 Set 2012 16:33:31 CEST


Salve a tutti,

devo creare un client http che faccia delle richieste tramite un proxy.

"Niente di più semplice", direte voi.

Lo pensavo anche io, ma sono completamente bloccato.

Ridotto ai minimi termini, il mio problema è che il codice che segue:

#! /usr/bin/python

import urllib2

proxy = urllib2.ProxyHandler({'http':
r'http://primaparteacc@secondaparteacc:password@proxybiblio2.si.unimib.it:8080'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://webofknowledge.com')
return_str = conn.read()

mi restituisce un "HTTP Error 407: Proxy Authentication Required".

Ora, quello stesso proxy con Firefox funziona perfettamente (N.B: a
parte che purtroppo non posso darvi nome utente e password per
riprodurre, se volete provarlo considerate che il funziona solo con
alcuni indirizzi - come ad esempio http://webofknowledge.com ).

Quindi mi sorgono 2 domande: il primo è ovviamente "cosa caspita sta
succedendo?".
Il secondo è "ma Proxy Authentication Required può anche voler
significare che l'autenticazione _è stata tentata_ ma è fallita?".
Non che nome utente e password possano essere sbagliati, ma se la
risposta fosse "sì" comincerei a preoccuparmi di come urllib2 tratta
l'"@" presente nel nome utente.

N.B: ho verificato, con qualche "print" in urllib, che il parsing della
descrizione del proxy (suddivisione in nome utente, password, host,
porta) _non_ è disturbato dalla presenza della prima "@" (quindi tutt'al
più il problema è a valle).

"@" che però blocca tutti i miei tentativi di riprodurre con il comando
da terminale wget, dato che

http_proxy='http://primaparteacc@secondaparteacc:password@proxybiblio2.si.unimib.it:8080' wget http://www.webofknowledge.com

mi restituisce un "Errore analizzando l'URL del proxy
http://primaparteacc@secondaparteacc:password@proxybiblio2.si.unimib.it:8080: Numero di porta non valido."

Qualsiasi suggerimento sarà considerato manna dal cielo.

grazie, ciao

Pietro



Maggiori informazioni sulla lista Python