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

如何将字符串形式的cookielib.Cookie转为set_cookie可接受的对象?

解决将Cookie字符串转换为cookielib.Cookie对象的问题

你遇到的问题很清晰:你把原本应该是cookielib.Cookie实例的代码写成了Unicode字符串,直接传给cookiejar.set_cookie()肯定会报错——这个方法只认真正的Cookie对象,不认字符串文本,所以才会抛出AttributeError: 'Text' object has no attribute 'domain'。

下面给你两种可行的解决办法:

方法1:用eval()快速转换(注意安全风险)

如果这个Cookie字符串是你自己生成的、来源绝对可信,那么可以直接用eval()执行字符串里的代码,生成Cookie对象:

import cookielib

cookiejar = cookielib.LWPCookieJar()
# 你的Unicode字符串c0
c0 = u"cookielib.Cookie(version=0, name='_mobile_sess', value='BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoQX2NzcmZfdG9rZW4iLTY4YWYxODc5ZmVlNTRhMDM4YzUwN2VjMmNiMWJkMjZlMTIxNDViNWM%3D--a18dca22d18735ebb9c4f91f595bae999e138f5e', port=None, port_specified=False, domain='.twitter.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=True, expires=1531884528, discard=False, comment=None, comment_url=None, rest={'HTTPOnly': None}, rfc2109=False)"

# 执行字符串代码,生成Cookie对象
cookie_obj = eval(c0)
# 现在可以正常添加到cookiejar了
cookiejar.set_cookie(cookie_obj)

⚠️ 注意:eval()会执行字符串里的任意Python代码,如果这个字符串来自外部(比如用户输入、网络请求),绝对不能用这个方法,会有严重的安全风险。

方法2:手动解析字符串生成对象(更安全)

如果Cookie字符串来源不可信,或者你想避免eval()的风险,可以手动解析字符串里的参数,再创建Cookie对象:

import cookielib
import re

cookiejar = cookielib.LWPCookieJar()
c0_str = u"cookielib.Cookie(version=0, name='_mobile_sess', value='BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoQX2NzcmZfdG9rZW4iLTY4YWYxODc5ZmVlNTRhMDM4YzUwN2VjMmNiMWJkMjZlMTIxNDViNWM%3D--a18dca22d18735ebb9c4f91f595bae999e138f5e', port=None, port_specified=False, domain='.twitter.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=True, expires=1531884528, discard=False, comment=None, comment_url=None, rest={'HTTPOnly': None}, rfc2109=False)"

# 提取括号内的参数内容
params_match = re.match(r'cookielib\.Cookie\((.*)\)', c0_str)
if params_match:
    params_str = params_match.group(1)
else:
    raise ValueError("Invalid Cookie string format")

# 解析参数键值对
cookie_params = {}
for item in params_str.split(','):
    item = item.strip()
    if not item:
        continue
    # 拆分键和值(只拆分第一个等号)
    key, value = item.split('=', 1)
    # 处理不同类型的值
    if value.startswith("'") and value.endswith("'"):
        # 字符串类型,去掉引号
        cookie_params[key] = value[1:-1]
    elif value == 'None':
        cookie_params[key] = None
    elif value in ('True', 'False'):
        # 布尔类型
        cookie_params[key] = value == 'True'
    elif value.isdigit():
        # 整数类型
        cookie_params[key] = int(value)
    elif '{' in value:
        # 处理rest字典(这里用eval是安全的,因为我们只匹配了字典格式的内容)
        cookie_params[key] = eval(value)

# 创建Cookie对象并添加到cookiejar
cookie_obj = cookielib.Cookie(**cookie_params)
cookiejar.set_cookie(cookie_obj)

这个方法通过正则提取参数,再逐个解析类型,避免了执行未知代码的风险,适合大多数场景。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:41:41