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

如何在aiohttp的Session中添加Cookie?

如何用CookieJar实现类似requests会话的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:35:27