Skip to content

Commit 12502bc

Browse files
committed
fix: preserve custom CookiePolicy in Session.prepare_request
Use _copy_cookie_jar to preserve the session's CookiePolicy when preparing requests, instead of creating a new RequestsCookieJar with the default policy. Fixes #7122, #3416
1 parent 7029833 commit 12502bc

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

src/requests/sessions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from .compat import Mapping, cookielib, urljoin, urlparse
1818
from .cookies import (
1919
RequestsCookieJar,
20+
_copy_cookie_jar,
2021
cookiejar_from_dict,
2122
extract_cookies_to_jar,
2223
merge_cookies,
@@ -472,7 +473,7 @@ def prepare_request(self, request):
472473

473474
# Merge with session cookies
474475
merged_cookies = merge_cookies(
475-
merge_cookies(RequestsCookieJar(), self.cookies), cookies
476+
_copy_cookie_jar(self.cookies), cookies
476477
)
477478

478479
# Set environment's basic authentication if not explicitly set.

tests/test_requests.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,17 @@ def test_cookielib_cookiejar_on_redirect(self, httpbin):
469469
assert cookies["foo"] == "bar"
470470
assert cookies["cookie"] == "tasty"
471471

472+
def test_cookie_policy_preserved_on_prepare_request(self):
473+
class MyCookiePolicy(cookielib.DefaultCookiePolicy):
474+
pass
475+
476+
s = requests.Session()
477+
s.cookies.set_policy(MyCookiePolicy())
478+
479+
req = requests.Request("GET", "https://example.com/")
480+
prepared = s.prepare_request(req)
481+
assert isinstance(prepared._cookies.get_policy(), MyCookiePolicy)
482+
472483
def test_requests_in_history_are_not_overridden(self, httpbin):
473484
resp = requests.get(httpbin("redirect/3"))
474485
urls = [r.url for r in resp.history]

0 commit comments

Comments
 (0)