From 500f15da1fe54e3773be42f7770680d1f86b699f Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Thu, 27 Aug 2015 17:38:18 +0000 Subject: [PATCH] Factor out the proxy selection code --- requests/adapters.py | 18 +++++------------- requests/utils.py | 8 ++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index b9b3326e..f61ea824 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -17,7 +17,8 @@ from .packages.urllib3.util import Timeout as TimeoutSauce from .packages.urllib3.util.retry import Retry from .compat import urlparse, basestring from .utils import (DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers, - prepend_scheme_if_needed, get_auth_from_url, urldefragauth) + prepend_scheme_if_needed, get_auth_from_url, urldefragauth, + select_proxy) from .structures import CaseInsensitiveDict from .packages.urllib3.exceptions import ConnectTimeoutError from .packages.urllib3.exceptions import HTTPError as _HTTPError @@ -238,11 +239,7 @@ class HTTPAdapter(BaseAdapter): :param url: The URL to connect to. :param proxies: (optional) A Requests-style dictionary of proxies used on this request. """ - proxies = proxies or {} - urlparts = urlparse(url.lower()) - proxy = proxies.get(urlparts.scheme+'://'+urlparts.hostname) - if proxy is None: - proxy = proxies.get(urlparts.scheme) + proxy = select_proxy(url, proxies) if proxy: proxy = prepend_scheme_if_needed(proxy, 'http') @@ -277,13 +274,8 @@ class HTTPAdapter(BaseAdapter): :param request: The :class:`PreparedRequest ` being sent. :param proxies: A dictionary of schemes to proxy URLs. """ - proxies = proxies or {} - urlparts = urlparse(request.url.lower()) - proxy = proxies.get(urlparts.scheme+'://'+urlparts.hostname) - if proxy is None: - proxy = proxies.get(urlparts.scheme) - - if proxy and urlparts.scheme != 'https': + proxy = select_proxy(request.url, proxies) + if proxy and not request.url.lower().startswith('https'): url = urldefragauth(request.url) else: url = request.path_url diff --git a/requests/utils.py b/requests/utils.py index 3fd0e41f..ddc2c00a 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -537,6 +537,14 @@ def get_environ_proxies(url): else: return getproxies() +def select_proxy(url, proxies): + """Select a proxy, if applicable.""" + proxies = proxies or {} + urlparts = urlparse(url.lower()) + proxy = proxies.get(urlparts.scheme+'://'+urlparts.hostname) + if proxy is None: + proxy = proxies.get(urlparts.scheme) + return proxy def default_user_agent(name="python-requests"): """Return a string representing the default user agent."""