Store the request cookiejar in PreparedRequest.cookies fix #1728
authorChase Sterling <chase.sterling@gmail.com>
Thu, 7 Nov 2013 02:52:21 +0000 (21:52 -0500)
committerIan Cordasco <graffatcolmingov@gmail.com>
Wed, 4 Dec 2013 12:38:58 +0000 (06:38 -0600)
Conflicts:
requests/sessions.py

requests/auth.py
requests/models.py
requests/sessions.py

index f87087d..ba979b5 100644 (file)
@@ -16,6 +16,7 @@ import logging
 from base64 import b64encode
 
 from .compat import urlparse, str
+from .cookies import extract_cookies_to_jar
 from .utils import parse_dict_header
 
 log = logging.getLogger(__name__)
@@ -169,7 +170,8 @@ class HTTPDigestAuth(AuthBase):
             r.content
             r.raw.release_conn()
             prep = r.request.copy()
-            prep.prepare_cookies(r.cookies)
+            extract_cookies_to_jar(prep.cookies, r.request, r.raw)
+            prep.prepare_cookies(prep.cookies)
 
             prep.headers['Authorization'] = self.build_digest_header(
                 prep.method, prep.url)
index c68f911..31d120e 100644 (file)
@@ -270,6 +270,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
         self.url = None
         #: dictionary of HTTP headers.
         self.headers = None
+        #: The `CookieJar` used to create the Cookie header will be stored here
+        #: after prepare_cookies is called
+        self.cookies = None
         #: request body to send to the server.
         self.body = None
         #: dictionary of callback hooks, for internal usage.
@@ -299,6 +302,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
         p.method = self.method
         p.url = self.url
         p.headers = self.headers.copy()
+        p.cookies = self.cookies.copy()
         p.body = self.body
         p.hooks = self.hooks
         return p
@@ -474,14 +478,13 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
         """Prepares the given HTTP cookie data."""
 
         if isinstance(cookies, cookielib.CookieJar):
-            cookies = cookies
+            self.cookies = cookies
         else:
-            cookies = cookiejar_from_dict(cookies)
+            self.cookies = cookiejar_from_dict(cookies)
 
-        if 'cookie' not in self.headers:
-            cookie_header = get_cookie_header(cookies, self)
-            if cookie_header is not None:
-                self.headers['Cookie'] = cookie_header
+        cookie_header = get_cookie_header(self.cookies, self)
+        if cookie_header is not None:
+            self.headers['Cookie'] = cookie_header
 
     def prepare_hooks(self, hooks):
         """Prepares the given hooks."""
index cdce648..52adb7a 100644 (file)
@@ -153,7 +153,8 @@ class SessionRedirectMixin(object):
             except KeyError:
                 pass
 
-            prepared_request.prepare_cookies(self.cookies)
+            extract_cookies_to_jar(prepared_request.cookies, prepared_request, resp.raw)
+            prepared_request.prepare_cookies(prepared_request.cookies)
 
             resp = self.send(
                 prepared_request,
@@ -345,9 +346,6 @@ class Session(SessionRedirectMixin):
         )
         prep = self.prepare_request(req)
 
-        # Add param cookies to session cookies
-        self.cookies = merge_cookies(self.cookies, cookies)
-
         proxies = proxies or {}
 
         # Gather clues from the surrounding environment.