From eb8fed4ecd8fbb51822553534b8b2f3cc459de60 Mon Sep 17 00:00:00 2001 From: Elias Dorneles Date: Tue, 23 Jun 2015 00:43:15 -0300 Subject: [PATCH] support empty password for http_proxy config --- scrapy/downloadermiddlewares/httpproxy.py | 2 +- tests/test_downloadermiddleware_httpproxy.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scrapy/downloadermiddlewares/httpproxy.py b/scrapy/downloadermiddlewares/httpproxy.py index 48a877c91..dda6a3d2a 100644 --- a/scrapy/downloadermiddlewares/httpproxy.py +++ b/scrapy/downloadermiddlewares/httpproxy.py @@ -25,7 +25,7 @@ class HttpProxyMiddleware(object): proxy_type, user, password, hostport = _parse_proxy(url) proxy_url = urlunparse((proxy_type or orig_type, hostport, '', '', '', '')) - if user and password: + if user: user_pass = '%s:%s' % (unquote(user), unquote(password)) creds = base64.b64encode(user_pass).strip() else: diff --git a/tests/test_downloadermiddleware_httpproxy.py b/tests/test_downloadermiddleware_httpproxy.py index 191664076..5b9717a89 100644 --- a/tests/test_downloadermiddleware_httpproxy.py +++ b/tests/test_downloadermiddleware_httpproxy.py @@ -54,6 +54,14 @@ class TestDefaultHeadersMiddleware(TestCase): self.assertEquals(req.meta, {'proxy': 'https://proxy:3128'}) self.assertEquals(req.headers.get('Proxy-Authorization'), 'Basic dXNlcjpwYXNz') + def test_proxy_auth_empty_passwd(self): + os.environ['http_proxy'] = 'https://user:@proxy:3128' + mw = HttpProxyMiddleware() + req = Request('http://scrapytest.org') + assert mw.process_request(req, spider) is None + self.assertEquals(req.meta, {'proxy': 'https://proxy:3128'}) + self.assertEquals(req.headers.get('Proxy-Authorization'), 'Basic dXNlcjo=') + def test_proxy_already_seted(self): os.environ['http_proxy'] = http_proxy = 'https://proxy.for.http:3128' mw = HttpProxyMiddleware()