diff --git a/requests/sessions.py b/requests/sessions.py index 4c6fa2f2..a46957ff 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -91,10 +91,17 @@ class SessionRedirectMixin(object): """Receives a Response. Returns a generator of Responses.""" i = 0 + hist = [] #keep track of history while resp.is_redirect: prepared_request = req.copy() + if i > 0: + #create deep copy of the history and keep track of redirects + hist.append(resp) + new_hist = list(hist) + resp.history = new_hist + try: resp.content # Consume socket so it can be released except (ChunkedEncodingError, ContentDecodingError, RuntimeError): diff --git a/test_requests.py b/test_requests.py index c9804517..aa4a2745 100755 --- a/test_requests.py +++ b/test_requests.py @@ -974,6 +974,13 @@ class RequestsTestCase(unittest.TestCase): assert isinstance(s, builtin_str) assert s == "Basic dGVzdDp0ZXN0" + def test_requests_history_is_saved(self): + r = requests.get('https://httpbin.org/redirect/5') + count = 0 + for item in r.history: + assert len(item.history) == count + count = count + 1 + class TestContentEncodingDetection(unittest.TestCase): @@ -1364,6 +1371,7 @@ class TestRedirects: assert session.calls[-1] == send_call + @pytest.fixture def list_of_tuples(): return [