You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何序列化Python requests返回的Cookie以实现UTF-8存储及后续复用

解决方案

方案1:仅保留Cookie键值对(适用于大多数简单场景)

该方案实现简单,序列化后为可读的JSON文本,足够满足常规接口调用需求。

  • 序列化存储流程:
    1. 用requests.utils.dict_from_cookiejar将RequestsCookieJar对象转为Python字典
    2. 用json.dumps将字典序列化为UTF-8编码的字符串
    3. 存入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)
    
  • 反序列化使用流程:
    1. 从Keychain读取Cookie字符串
    2. 用json.loads将字符串转回字典
    3. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:27:01