If example.org requires authentication, then following
code:
host = 'example.org'
user = 'testuser'
password = ''
url = 'http://%s/' % host
authInfo = urllib2.HTTPPasswordMgrWithDefaultRealm()
authInfo.add_password( None, host, user, password )
authHandler = urllib2.HTTPBasicAuthHandler( authInfo )
opener = urllib2.build_opener( authHandler )
urlFile = opener.open( url )
print urlFile.read()
will die by throwing HTTPError 401:
File "/usr/lib/python2.3/urllib2.py", line 419, in
http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Authorization Required
even if authenticating with 'testuser' and empty
password is valid.
Empty password is mishandled (i.e. authentication with
empty password string is ignored) in
AbstractBasicAuthHandler.retry_http_basic_auth
def retry_http_basic_auth(self, host, req, realm):
user,pw = self.passwd.find_user_password(realm,
host)
if pw:
[...]
It can be fixed by changing:
if pw:
to
if pw is not None:
Patch attached.
|