Use session cookies when following redirects
authorMiikka Koskinen <miikka.koskinen@iki.fi>
Sat, 9 Mar 2013 10:53:38 +0000 (12:53 +0200)
committerMiikka Koskinen <miikka.koskinen@iki.fi>
Tue, 12 Mar 2013 16:43:58 +0000 (18:43 +0200)
When a redirect was followed, only the cookies set by the initial
response were used in the follow-up request. Fixes #1228.

requests/sessions.py

index 979c0034d43d2fcfdf7e954482f182c95980bdf5..c9126c1202247c9e1d7dde22e3b85771cc9d4744 100644 (file)
@@ -80,7 +80,7 @@ def merge_kwargs(local_kwarg, default_kwarg):
 
 class SessionRedirectMixin(object):
     def resolve_redirects(self, resp, req, stream=False, timeout=None,
-                          verify=True, cert=None, proxies=None):
+                          verify=True, cert=None, proxies=None, cookies=None):
         """Receives a Response. Returns a generator of Responses."""
 
         i = 0
@@ -90,7 +90,10 @@ class SessionRedirectMixin(object):
         prepared_request.hooks = req.hooks
         prepared_request.method = req.method
         prepared_request.url = req.url
-        cookiejar = resp.cookies
+
+        cookiejar = cookiejar_from_dict({})
+        cookiejar.update(cookies)
+        cookiejar.update(resp.cookies)
 
         # ((resp.status_code is codes.see_other))
         while (('location' in resp.headers and resp.status_code in REDIRECT_STATI)):
@@ -408,6 +411,7 @@ class Session(SessionRedirectMixin):
         cert = kwargs.get('cert')
         proxies = kwargs.get('proxies')
         hooks = request.hooks
+        cookies = self.cookies
 
         # Get the appropriate adapter to use
         adapter = self.get_adapter(url=request.url)
@@ -425,7 +429,7 @@ class Session(SessionRedirectMixin):
         # Redirect resolving generator.
         gen = self.resolve_redirects(r, request, stream=stream,
                                      timeout=timeout, verify=verify, cert=cert,
-                                     proxies=proxies)
+                                     proxies=proxies, cookies=cookies)
 
         # Resolve redirects if allowed.
         history = [resp for resp in gen] if allow_redirects else []