Use session cookies when following redirects

When a redirect was followed, only the cookies set by the initial
response were used in the follow-up request. Fixes #1228.
This commit is contained in:
Miikka Koskinen
2013-03-09 12:53:38 +02:00
parent e958511df0
commit 5bb2be9a23
+7 -3
View 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 []