From a982b0d90346febf9c0b4df042fc80fc18cc93dd Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 17 Dec 2012 07:21:10 -0500 Subject: [PATCH] proxy manager --- requests/adapters.py | 2 +- requests/sessions.py | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index ffdf6c9..8768e73 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -127,7 +127,7 @@ class HTTPAdapter(BaseAdapter): proxy = proxies.get(urlparse(url).scheme) if proxy: - conn = poolmanager.proxy_from_url(proxy) + conn = self.poolmanager.ProxyManager(self.poolmanager.proxy_from_url(proxy)) else: conn = self.poolmanager.connection_from_url(url) diff --git a/requests/sessions.py b/requests/sessions.py index 8c4a491..620355d 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -19,7 +19,7 @@ from .exceptions import TooManyRedirects, InvalidSchema from .compat import urlparse, urljoin from .adapters import HTTPAdapter -from .utils import requote_uri +from .utils import requote_uri, get_environ_proxies, get_netrc_auth from .status_codes import codes REDIRECT_STATI = (codes.moved, codes.found, codes.other, codes.temporary_moved) @@ -204,6 +204,7 @@ class Session(SessionRedirectMixin): cert=None): cookies = cookies or {} + proxies = proxies or {} # Bootstrap CookieJar. if not isinstance(cookies, cookielib.CookieJar): @@ -213,6 +214,17 @@ class Session(SessionRedirectMixin): for cookie in self.cookies: cookies.set_cookie(cookie) + # Gather clues from the surrounding environment. + if self.trust_env: + # Set environment's proxies. + env_proxies = get_environ_proxies(url) or {} + for (k, v) in env_proxies.items(): + proxies.setdefault(k, v) + + # Set environment's basic authentication. + if not auth: + auth = get_netrc_auth(url) + # Merge all the kwargs. params = merge_kwargs(params, self.params) headers = merge_kwargs(headers, self.headers) @@ -223,6 +235,7 @@ class Session(SessionRedirectMixin): verify = merge_kwargs(verify, self.verify) cert = merge_kwargs(cert, self.cert) + # Create the Request. req = Request() req.method = method @@ -239,7 +252,7 @@ class Session(SessionRedirectMixin): prep = req.prepare() # Send the request. - resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert) + resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies) # Redirect resolving generator. gen = self.resolve_redirects(resp, req, stream, timeout, verify, cert) -- 2.7.4