Added support for persistent connections (keep-alive) in proxy mode
authorLászló Vaskó <vlacko@gmail.com>
Sun, 2 Dec 2012 00:19:07 +0000 (01:19 +0100)
committerLászló Vaskó <vlacko@gmail.com>
Sun, 2 Dec 2012 00:28:24 +0000 (01:28 +0100)
requests/models.py

index 00d2370..045b3a5 100644 (file)
@@ -557,7 +557,7 @@ class Request(object):
         proxy = self.proxies.get(_p.scheme)
 
         if proxy and not any(map(_p.hostname.endswith, no_proxy)):
-            conn = poolmanager.proxy_from_url(proxy)
+            conn = poolmanager.ProxyManager(self.get_connection_for_url(proxy))
             _proxy = urlparse(proxy)
             if '@' in _proxy.netloc:
                 auth, url = _proxy.netloc.split('@', 1)
@@ -565,15 +565,10 @@ class Request(object):
                 r = self.proxy_auth(self)
                 self.__dict__.update(r.__dict__)
         else:
-            # Check to see if keep_alive is allowed.
-            try:
-                if self.config.get('keep_alive'):
-                    conn = self._poolmanager.connection_from_url(url)
-                else:
-                    conn = connectionpool.connection_from_url(url)
-                    self.headers['Connection'] = 'close'
-            except LocationParseError as e:
-                raise InvalidURL(e)
+            conn = self.get_connection_for_url(url)
+
+        if not self.config.get('keep_alive'):
+            self.headers['Connection'] = 'close'
 
         if url.startswith('https') and self.verify:
 
@@ -672,6 +667,17 @@ class Request(object):
 
             return self.sent
 
+    def get_connection_for_url(self, url):
+        # Check to see if keep_alive is allowed.
+        try:
+            if self.config.get('keep_alive'):
+                conn = self._poolmanager.connection_from_url(url)
+            else:
+                conn = connectionpool.connection_from_url(url)
+            return conn
+        except LocationParseError as e:
+            raise InvalidURL(e)
+
 
 class Response(object):
     """The core :class:`Response <Response>` object. All