如何在aiohttp的Session中添加Cookie?
requests的Session.cookies本质是继承自标准库http.cookiejar.CookieJar的RequestsCookieJar,它封装了Cookie的添加逻辑,简化了参数。如果你直接使用原生CookieJar失败,大概率是因为没有传入Cookie构造所需的完整参数。以下是两种场景的实现方案:
场景1:在requests中直接操作原生CookieJar
如果你想绕过requests的封装,直接用CookieJar管理会话Cookie,可以这样做:
import requests from http.cookiejar import CookieJar, Cookie session = requests.Session() # 初始化CookieJar实例 cookie_jar = CookieJar() # 构造完整的Cookie对象(注意:原生Cookie需要多个必填参数) target_cookie = Cookie( version=0, name=line["name"], # 你的Cookie名称 value=line["value"], # 你的Cookie值 port=None, port_specified=False, domain=line["domain"], # Cookie所属域名 domain_specified=True, domain_initial_dot=False, # 如果是泛域名(如.example.com)设为True path="/", # Cookie生效路径,一般设为根路径 path_specified=True, secure=False, # 是否仅在HTTPS下生效 expires=None, # 过期时间,None表示会话Cookie discard=True, comment=None, comment_url=None, rest={"HttpOnly": None}, # 可选:添加HttpOnly属性 rfc2109=False ) # 将Cookie添加到CookieJar cookie_jar.set_cookie(target_cookie) # 绑定到requests会话 session.cookies = cookie_jar # 后续请求会自动携带该Cookie response = session.get("https://target-domain.com")
场景2:用标准库实现会话Cookie管理(脱离requests)
如果不想依赖requests,直接用urllib和CookieJar实现会话Cookie管理:
import urllib.request from http.cookiejar import CookieJar, Cookie # 创建CookieJar存储Cookie cookie_jar = CookieJar() # 添加Cookie(参数规则同上) cookie = Cookie( version=0, name="user_token", value="abc123xyz", port=None, port_specified=False, domain=".example.com", domain_specified=True, domain_initial_dot=True, path="/", path_specified=True, secure=True, expires=1735689600, # 过期时间戳(示例:2024-01-01) discard=False, comment=None, comment_url=None, rest={}, rfc2109=False ) cookie_jar.set_cookie(cookie) # 创建携带Cookie的请求Opener opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie_jar)) # 发送请求,会话会自动携带Cookie response = opener.open("https://example.com/profile") print(response.read().decode("utf-8"))
关键注意事项
- 原生
Cookie类的参数比requests的set()方法多很多,不能省略必填参数,requests的封装帮你补全了默认值 - 域名参数
domain如果是泛域名(如.example.com),必须设置domain_initial_dot=True,否则Cookie无法在子域名生效 path参数建议设为"/",确保该域名下所有路径都能使用该Cookie- 如果需要添加
HttpOnly或Secure属性,在rest参数中传入对应键值对
内容的提问来源于stack exchange,提问作者Fresh Up
相关产品推荐
相关产品推荐

