Index: Lib/urllib.py =================================================================== --- Lib/urllib.py (revision 81997) +++ Lib/urllib.py (working copy) @@ -661,7 +661,8 @@ else: return self.http_error_default(url, fp, errcode, errmsg, headers) - def http_error_401(self, url, fp, errcode, errmsg, headers, data=None): + def http_error_401(self, url, fp, errcode, errmsg, headers, data=None, + retry=False): """Error 401 -- authentication required. This function supports Basic authentication only.""" if not 'www-authenticate' in headers: @@ -677,13 +678,17 @@ if scheme.lower() != 'basic': URLopener.http_error_default(self, url, fp, errcode, errmsg, headers) + if not retry: + URLopener.http_error_default(self, url, fp, + errcode, errmsg, headers) name = 'retry_' + self.type + '_basic_auth' if data is None: return getattr(self,name)(url, realm) else: return getattr(self,name)(url, realm, data) - def http_error_407(self, url, fp, errcode, errmsg, headers, data=None): + def http_error_407(self, url, fp, errcode, errmsg, headers, data=None, + retry=False): """Error 407 -- proxy authentication required. This function supports Basic authentication only.""" if not 'proxy-authenticate' in headers: @@ -699,6 +704,9 @@ if scheme.lower() != 'basic': URLopener.http_error_default(self, url, fp, errcode, errmsg, headers) + if not retry: + URLopener.http_error_default(self, url, fp, + errcode, errmsg, headers) name = 'retry_proxy_' + self.type + '_basic_auth' if data is None: return getattr(self,name)(url, realm)