Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
 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,
     )
Beispiel #4
0
 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,
     )
Beispiel #5
0
 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,
     )