如何在http.cookiejar中设置带有自定义属性的Cookie?
解决方法
你出现报错的核心原因是CookieJar.set_cookie()方法不直接接收hostOnly、httpOnly这类自定义关键字参数,该方法仅接受cookielib.Cookie类的实例作为入参,且浏览器导出的Cookie字段名和标准Cookie类的参数名存在差异,需要手动做字段映射后构造Cookie实例再添加到CookieJar中。
适配代码(Python2 环境)
import json import cookielib jar = cookielib.CookieJar() # 建议使用with写法安全处理文件IO with open('cookies.json', 'r') as f: cookies = json.load(f) for cookie_item in cookies: # 处理过期时间,会话Cookie设置expires为None expires = cookie_item.get('expirationDate') if cookie_item.get('session', False): expires = None # 扩展属性存放在rest参数中 rest = {} if cookie_item.get('httpOnly'): rest['HttpOnly'] = True same_site = cookie_item.get('sameSite') if same_site: rest['SameSite'] = same_site domain_val = cookie_item['domain'] # 构造标准Cookie对象 cookie = cookielib.Cookie( version=0, name=cookie_item['name'], value=cookie_item['value'], port=None, port_specified=False, domain=domain_val, domain_specified=not cookie_item['hostOnly'], domain_initial_dot=domain_val.startswith('.'), path=cookie_item['path'], path_specified=True, secure=cookie_item['secure'], expires=expires, discard=cookie_item['session'], comment=None, comment_url=None, rest=rest, rfc2109=False ) # 添加Cookie到Jar jar.set_cookie(cookie)
Python3 环境适配
仅需修改导入语句即可,其余逻辑完全一致:
import http.cookiejar as cookielib
核心字段映射说明
hostOnly对应domain_specified属性,hostOnly=False代表允许匹配当前域名的所有子域名,此时domain_specified=TrueexpirationDate对应expires属性,会话Cookie需要设置为NonehttpOnly、sameSite这类非基础标准属性,统一放在rest字典中传入即可被CookieJar识别处理
内容的提问来源于stack exchange,提问作者Eat Ing
相关产品推荐
相关产品推荐

