diff --git a/src/requests/sessions.py b/src/requests/sessions.py index 731550de88..bc52abcc99 100644 --- a/src/requests/sessions.py +++ b/src/requests/sessions.py @@ -17,6 +17,7 @@ from .compat import Mapping, cookielib, urljoin, urlparse from .cookies import ( RequestsCookieJar, + _copy_cookie_jar, cookiejar_from_dict, extract_cookies_to_jar, merge_cookies, @@ -472,7 +473,7 @@ def prepare_request(self, request): # Merge with session cookies merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies + _copy_cookie_jar(self.cookies), cookies ) # Set environment's basic authentication if not explicitly set. diff --git a/tests/test_requests.py b/tests/test_requests.py index 75d2deff2e..dbcf3bd1b8 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -469,6 +469,17 @@ def test_cookielib_cookiejar_on_redirect(self, httpbin): assert cookies["foo"] == "bar" assert cookies["cookie"] == "tasty" + def test_cookie_policy_preserved_on_prepare_request(self): + class MyCookiePolicy(cookielib.DefaultCookiePolicy): + pass + + s = requests.Session() + s.cookies.set_policy(MyCookiePolicy()) + + req = requests.Request("GET", "https://example.com/") + prepared = s.prepare_request(req) + assert isinstance(prepared._cookies.get_policy(), MyCookiePolicy) + def test_requests_in_history_are_not_overridden(self, httpbin): resp = requests.get(httpbin("redirect/3")) urls = [r.url for r in resp.history]