Relax Proxy-Authorization restrictions

This commit is contained in:
Adrián Chaves 2022-09-14 14:47:14 +02:00
parent 90b8503789
commit 77c055ee28
2 changed files with 17 additions and 2 deletions

View File

@ -78,4 +78,7 @@ class HttpProxyMiddleware:
del request.headers[b'Proxy-Authorization']
del request.meta['_auth_proxy']
elif b'Proxy-Authorization' in request.headers:
del request.headers[b'Proxy-Authorization']
if proxy_url:
request.meta['_auth_proxy'] = proxy_url
else:
del request.headers[b'Proxy-Authorization']

View File

@ -400,6 +400,9 @@ class TestHttpProxyMiddleware(TestCase):
self.assertNotIn(b'Proxy-Authorization', request.headers)
def test_proxy_authentication_header_proxy_without_credentials(self):
"""As long as the proxy URL in request metadata remains the same, the
Proxy-Authorization header is used and kept, and may even be
changed."""
middleware = HttpProxyMiddleware()
request = Request(
'https://example.com',
@ -408,7 +411,16 @@ class TestHttpProxyMiddleware(TestCase):
)
assert middleware.process_request(request, spider) is None
self.assertEqual(request.meta['proxy'], 'https://example.com')
self.assertNotIn(b'Proxy-Authorization', request.headers)
self.assertEqual(request.headers['Proxy-Authorization'], b'Basic foo')
assert middleware.process_request(request, spider) is None
self.assertEqual(request.meta['proxy'], 'https://example.com')
self.assertEqual(request.headers['Proxy-Authorization'], b'Basic foo')
request.headers['Proxy-Authorization'] = b'Basic bar'
assert middleware.process_request(request, spider) is None
self.assertEqual(request.meta['proxy'], 'https://example.com')
self.assertEqual(request.headers['Proxy-Authorization'], b'Basic bar')
def test_proxy_authentication_header_proxy_with_same_credentials(self):
middleware = HttpProxyMiddleware()