You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
urllib2 - Basic,Digest Proxy Auth Handlers failure will give 401 code instead of 407 #53852
The retry logic and code used by ProxyBasicAuthHandler and ProxyDigestAuthHandler are same as normal authentication handlers. While this reuse is good, there is a problem that, on authentication failure, the HTTPError code is hardcoded to 401, whereas for Proxy cases it should have been 407.
changed the title [-]urllib2 - Basic,Digest Auth Handlers Retry will give 401 code instead of 407[/-][+]urllib2 - Basic,Digest Proxy Auth Handlers failure will give 401 code instead of 407[/+]on Aug 19, 2010
This is still an issue and the relevant RFC part and a unittest would be as below. I would propose adding a new keyword argument with 401 as default value to ensure backwards compatibility with older versions. I can propose a PR if agreed and also improve test case since changing the hard coded status code from 401 to 407 doesn't seem to cause any failure.
The 407 (Proxy Authentication Required) status code is similar to 401
(Unauthorized), but it indicates that the client needs to
authenticate itself in order to use a proxy. The proxy MUST send a
Proxy-Authenticate header field (Section 4.3) containing a challenge
applicable to that proxy for the target resource. The client MAY
repeat the request with a new or replaced Proxy-Authorization header
field (Section 4.4).
unittest
diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py
index 591b48d6d4..ab8dd32795 100644
--- a/Lib/test/test_urllib2_localnet.py+++ b/Lib/test/test_urllib2_localnet.py@@ -357,9 +357,9 @@ class ProxyAuthTests(unittest.TestCase):
self.proxy_digest_handler.add_password(self.REALM, self.URL,
self.USER, self.PASSWD+"bad")
self.digest_auth_handler.set_qop("auth")
- self.assertRaises(urllib.error.HTTPError,- self.opener.open,- self.URL)+ with self.assertRaises(urllib.error.HTTPError) as cm:+ self.opener.open(self.URL)+ self.assertEqual(cm.exception.code, 407)
Activity
orsenthil commentedon Aug 19, 2010
The retry logic and code used by ProxyBasicAuthHandler and ProxyDigestAuthHandler are same as normal authentication handlers. While this reuse is good, there is a problem that, on authentication failure, the HTTPError code is hardcoded to 401, whereas for Proxy cases it should have been 407.
The problematic line is this:
can be changed by:
[-]urllib2 - Basic,Digest Auth Handlers Retry will give 401 code instead of 407[/-][+]urllib2 - Basic,Digest Proxy Auth Handlers failure will give 401 code instead of 407[/+]terryjreedy commentedon Aug 20, 2010
In 3.x, http_error_auth_reqed is a method of urllib.request.AbstractBasicAuthHandler
(20.5.8. AbstractBasicAuthHandler Objects in 3.1 lib manual)
BreamoreBoy commentedon Sep 28, 2014
Slipped under the radar?
tirkarthi commentedon Apr 27, 2019
This is still an issue and the relevant RFC part and a unittest would be as below. I would propose adding a new keyword argument with 401 as default value to ensure backwards compatibility with older versions. I can propose a PR if agreed and also improve test case since changing the hard coded status code from 401 to 407 doesn't seem to cause any failure.
https://tools.ietf.org/html/rfc7235#section-3.2
3.2. 407 Proxy Authentication Required
The 407 (Proxy Authentication Required) status code is similar to 401
(Unauthorized), but it indicates that the client needs to
authenticate itself in order to use a proxy. The proxy MUST send a
Proxy-Authenticate header field (Section 4.3) containing a challenge
applicable to that proxy for the target resource. The client MAY
repeat the request with a new or replaced Proxy-Authorization header
field (Section 4.4).
unittest
======================================================================
FAIL: test_proxy_with_bad_password_raises_httperror (test.test_urllib2_localnet.ProxyAuthTests)
----------------------------------------------------------------------
Ran 1 test in 0.160s
FAILED (failures=1)
orsenthil commentedon Oct 29, 2026
This will be handled by #160917
gh-53852 Proxy Auth failure to raise 407 instead of 401 (#160917)
[3.14] gh-53852 Proxy Auth failure to raise 407 instead of 401 (GH-16…
[3.15] gh-53852 Proxy Auth failure to raise 407 instead of 401 (GH-16…