Cookies¶
Save and load cookies¶
Do not use get_dict to dump and load cookies. Cookies are more than just plain
key-value pairs.
Using pickle:
# example from: https://github.com/encode/httpx/issues/895
import pickle
# import httpx
import curl_cffi
def save_cookies(client):
with open("cookies.pk", "wb") as f:
pickle.dump(client.cookies.jar._cookies, f)
def load_cookies():
if not os.path.isfile("cookies.pk"):
return None
with open("cookies.pk", "rb") as f:
return pickle.load(f)
# client = httpx.Client(cookies=load_cookies())
client = curl_cffi.Session()
client.get("https://httpbin.org/cookies/set/foo/bar")
save_cookies(client)
client = curl_cffi.Session()
client.cookies.jar._cookies.update(load_cookies())
print(client.cookies.get("foo"))
Using mozilla cookie jar:
See: https://github.com/lexiforest/curl_cffi/issues/381
TODO: expose libcurl’s native cookies.txt support.
Discard cookies when using Session¶
You may need to discard cookies when using sessions, especially when using AsyncSession.
Use the discard_cookies option.
s = requests.Session()
set_url = "https://httpbin.org/cookies"
r = s.get(set_url)
assert r.cookies["foo"] == s.cookies["foo"]
old_cookie = r.cookies["foo"]
# Let's start discarding cookies
s.discard_cookies = True
r = s.get(set_url)
assert r.cookies["foo"] != s.cookies["foo"]
assert old_cookie == s.cookies["foo"]
# The behavior can be reverted
s.discard_cookies = False
r = s.get(set_url)
assert r.cookies["foo"] == s.cookies["foo"]
old_cookie = r.cookies["foo"]
# Also works as request parameter
r = s.get(set_url, discard_cookies=True)
assert r.cookies["foo"] != s.cookies["foo"]
assert old_cookie == s.cookies["foo"]