如何序列化Python requests返回的Cookie以实现UTF-8存储及后续复用
解决方案
方案1:仅保留Cookie键值对(适用于大多数简单场景)
该方案实现简单,序列化后为可读的JSON文本,足够满足常规接口调用需求。
- 序列化存储流程:
- 用
requests.utils.dict_from_cookiejar将RequestsCookieJar对象转为Python字典 - 用
json.dumps将字典序列化为UTF-8编码的字符串 - 存入Keychain
示例代码:
import requests import json import keyring # 原有接口请求逻辑 response = requests.post('https://httpbin.org/post', data = {'key':'value'}) # 序列化Cookie cookie_dict = requests.utils.dict_from_cookiejar(response.cookies) cookie_str = json.dumps(cookie_dict, ensure_ascii=False) # 存入Keychain,可将第一个参数替换为你的应用标识,方便后续读取 keyring.set_password("my_api_client", "user_cookies", cookie_str) - 用
- 反序列化使用流程:
- 从Keychain读取Cookie字符串
- 用
json.loads将字符串转回字典 - 用
requests.utils.cookiejar_from_dict将字典转回RequestsCookieJar对象,直接用于后续请求
示例代码:
import requests import json import keyring # 从Keychain读取 cookie_str = keyring.get_password("my_api_client", "user_cookies") if cookie_str: # 反序列化为CookieJar cookie_dict = json.loads(cookie_str) cookies = requests.utils.cookiejar_from_dict(cookie_dict) # 后续请求直接使用即可 resp = requests.get("https://httpbin.org/get", cookies=cookies)
方案2:完整保留Cookie所有属性(适用于需要保留域名、过期时间、路径等元信息的场景)
如果你的业务依赖Cookie的元属性校验,可以用pickle序列化后转base64文本存储:
注意:pickle反序列化存在安全风险,仅在你确认存储的Cookie内容来源可信时使用该方案。
- 序列化存储示例:
import requests import pickle import base64 import keyring response = requests.post('https://httpbin.org/post', data = {'key':'value'}) # 序列化并转base64文本 pickle_bytes = pickle.dumps(response.cookies) cookie_str = base64.b64encode(pickle_bytes).decode('utf-8') # 存入Keychain keyring.set_password("my_api_client", "user_cookies_full", cookie_str) - 反序列化使用示例:
import requests import pickle import base64 import keyring cookie_str = keyring.get_password("my_api_client", "user_cookies_full") if cookie_str: pickle_bytes = base64.b64decode(cookie_str.encode('utf-8')) cookies = pickle.loads(pickle_bytes) # 直接用于后续请求即可,所有元信息完整保留 resp = requests.get("https://httpbin.org/get", cookies=cookies)
内容的提问来源于stack exchange,提问作者John Doebrek
相关产品推荐
相关产品推荐

