def test_change_proxy_keep_credentials(self): middleware = HttpProxyMiddleware() request = Request( 'https://example.com', meta={'proxy': 'https://*****:*****@example.com'}, ) assert middleware.process_request(request, spider) is None request.meta['proxy'] = 'https://*****:*****@example.org' assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.org') encoded_credentials = middleware._basic_auth_header( 'user1', 'password1', ) self.assertEqual( request.headers['Proxy-Authorization'], b'Basic ' + encoded_credentials, ) # Make sure, indirectly, that _auth_proxy is updated. request.meta['proxy'] = 'https://example.com' assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') self.assertNotIn(b'Proxy-Authorization', request.headers)
def test_remove_credentials(self): """If the proxy request meta switches to a proxy URL with the same proxy but no credentials, the original credentials must be still used. To remove credentials while keeping the same proxy URL, users must delete the Proxy-Authorization header. """ middleware = HttpProxyMiddleware() request = Request( 'https://example.com', meta={'proxy': 'https://*****:*****@example.com'}, ) assert middleware.process_request(request, spider) is None request.meta['proxy'] = 'https://example.com' assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') encoded_credentials = middleware._basic_auth_header( 'user1', 'password1', ) self.assertEqual( request.headers['Proxy-Authorization'], b'Basic ' + encoded_credentials, ) request.meta['proxy'] = 'https://example.com' del request.headers[b'Proxy-Authorization'] assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') self.assertNotIn(b'Proxy-Authorization', request.headers)
def test_proxy_authentication_header_proxy_with_different_credentials(self): middleware = HttpProxyMiddleware() encoded_credentials1 = middleware._basic_auth_header( 'user1', 'password1', ) request = Request( 'https://example.com', headers={'Proxy-Authorization': b'Basic ' + encoded_credentials1}, meta={'proxy': 'https://*****:*****@example.com'}, ) assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') encoded_credentials2 = middleware._basic_auth_header( 'user2', 'password2', ) self.assertEqual( request.headers['Proxy-Authorization'], b'Basic ' + encoded_credentials2, )
def test_add_proxy_with_credentials(self): middleware = HttpProxyMiddleware() request = Request('https://example.com') assert middleware.process_request(request, spider) is None request.meta['proxy'] = 'https://*****:*****@example.com' assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') encoded_credentials = middleware._basic_auth_header( 'user1', 'password1', ) self.assertEqual( request.headers['Proxy-Authorization'], b'Basic ' + encoded_credentials, )
def test_change_credentials(self): """If the proxy request meta switches to a proxy URL with different credentials, those new credentials must be used.""" middleware = HttpProxyMiddleware() request = Request( 'https://example.com', meta={'proxy': 'https://*****:*****@example.com'}, ) assert middleware.process_request(request, spider) is None request.meta['proxy'] = 'https://*****:*****@example.com' assert middleware.process_request(request, spider) is None self.assertEqual(request.meta['proxy'], 'https://example.com') encoded_credentials = middleware._basic_auth_header( 'user2', 'password2', ) self.assertEqual( request.headers['Proxy-Authorization'], b'Basic ' + encoded_credentials, )