From b5f2e5cc50a5eab06d36e25d7edc137eae454518 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 8 May 2006 17:36:08 +0000 Subject: [PATCH] Patch #1479302: Make urllib2 digest auth and basic auth play together. --- Lib/test/test_urllib2.py | 21 +++++++++++++++++++++ Lib/urllib2.py | 3 --- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 08b97a6f63..c8f19bcab0 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -779,6 +779,27 @@ class HandlerTests(unittest.TestCase): "proxy.example.com:3128", ) + def test_basic_and_digest_auth_handlers(self): + # HTTPDigestAuthHandler threw an exception if it couldn't handle a 40* + # response (http://python.org/sf/1479302), where it should instead + # return None to allow another handler (especially + # HTTPBasicAuthHandler) to handle the response. + class TestDigestAuthHandler(urllib2.HTTPDigestAuthHandler): + handler_order = 400 # strictly before HTTPBasicAuthHandler + opener = OpenerDirector() + password_manager = MockPasswordManager() + digest_handler = TestDigestAuthHandler(password_manager) + basic_handler = urllib2.HTTPBasicAuthHandler(password_manager) + opener.add_handler(digest_handler) + realm = "ACME Networks" + http_handler = MockHTTPHandler( + 401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % realm) + self._test_basic_auth(opener, basic_handler, "Authorization", + realm, http_handler, password_manager, + "http://acme.example.com/protected", + "http://acme.example.com/protected", + ) + def _test_basic_auth(self, opener, auth_handler, auth_header, realm, http_handler, password_manager, request_url, protected_url): diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 8d38504d2b..5948376f6c 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -846,9 +846,6 @@ class AbstractDigestAuthHandler: scheme = authreq.split()[0] if scheme.lower() == 'digest': return self.retry_http_digest_auth(req, authreq) - else: - raise ValueError("AbstractDigestAuthHandler doesn't know " - "about %s"%(scheme)) def retry_http_digest_auth(self, req, auth): token, challenge = auth.split(' ', 1) -- 2.40.0