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

如何在Python的requests模块中实现类似curl的跨请求Cookie复用及CookieJar更新

如何在Python的requests模块中实现类似curl的跨请求Cookie复用及CookieJar更新

嘿,我来帮你搞定这个问题!你用curl的时候,-c cookie_jar是把请求返回的Cookie保存到文件,-b cookie_jar是从文件加载Cookie用于后续请求,同时第二个请求还会用-c cookie_jar更新这个文件里的Cookie。在Python的requests模块里,我们用**requests.Session()对象**就能轻松实现一模一样的效果——它会自动维护一个CookieJar,跨请求自动携带、更新Cookie;如果需要像curl那样持久化到文件,也有对应的方法。

情况1:同一程序内跨请求复用Cookie(无需文件)

这种场景下,Session对象就像你的浏览器会话,所有通过它发送的请求都会共享同一个CookieJar,完全不用手动处理Cookie的保存和加载,比curl更省心:

import requests

# 创建Session对象,它会自动帮你维护CookieJar
session = requests.Session()

# 1. 对应第一个curl登录请求(-c cookie_jar)
login_url = "https://example.com/api/wealth/mobile/auth/login"
login_headers = {
    "api-key": "qweqwexxc123ewervdssdf",
    "request-id": "login",
    "Content-Type": "application/json"
}
login_data = {
    "locale": "en",
    "signinId": "xxxx@gmail.com",
    "password": "xxxxxx",
    "remembered": "false",
    "trueIP": "192.168.0.1"
}

# 发送登录请求,Session会自动保存返回的Cookie到内部的CookieJar
login_response = session.post(login_url, headers=login_headers, json=login_data)
login_response.raise_for_status()  # 可选:检查请求是否成功,失败则抛出异常

# 2. 对应第二个curl的MFA验证请求(-b cookie_jar -c cookie_jar)
mfa_url = "https://example.com/api/wealth/mobile/mfa/evaluatemfa"
mfa_headers = {
    "request-id": "mfa-evaluate"  # 根据实际需求添加headers
}
mfa_data = {
    # 这里填写你的MFA验证数据,比如验证码、设备信息等
}

# 发送MFA请求,Session会自动携带之前保存的Cookie,请求完成后还会自动更新CookieJar
mfa_response = session.post(mfa_url, headers=mfa_headers, json=mfa_data)
mfa_response.raise_for_status()

情况2:持久化Cookie到文件(和curl的-c/-b完全对应)

如果需要把Cookie保存到文件(比如重启程序后不用重新登录),可以用http.cookiejar.MozillaCookieJar,它直接支持读写curl格式的cookie文件:

import requests
from http.cookiejar import MozillaCookieJar

# 初始化一个MozillaCookieJar,对应curl的cookie_jar文件
cookie_jar = MozillaCookieJar("cookie_jar")

# 创建Session并绑定这个CookieJar
session = requests.Session()
session.cookies = cookie_jar

# 1. 登录并保存Cookie到文件(对应curl -c cookie_jar)
login_url = "https://example.com/api/wealth/mobile/auth/login"
login_headers = {
    "api-key": "qweqwexxc123ewervdssdf",
    "request-id": "login",
    "Content-Type": "application/json"
}
login_data = {
    "locale": "en",
    "signinId": "xxxx@gmail.com",
    "password": "xxxxxx",
    "remembered": "false",
    "trueIP": "192.168.0.1"
}

login_response = session.post(login_url, headers=login_headers, json=login_data)
login_response.raise_for_status()

# 保存Cookie到文件,ignore_discard=True保存临时Cookie,ignore_expires=True覆盖旧Cookie
cookie_jar.save(ignore_discard=True, ignore_expires=True)

# 2. 加载Cookie并发送MFA请求,同时更新Cookie文件(对应curl -b cookie_jar -c cookie_jar)
# 如果是在另一个会话中使用,先加载Cookie文件:
# cookie_jar.load("cookie_jar", ignore_discard=True, ignore_expires=True)

mfa_url = "https://example.com/api/wealth/mobile/mfa/evaluatemfa"
mfa_headers = {
    "request-id": "mfa-evaluate"
}
mfa_data = {
    # 你的MFA验证数据
}

mfa_response = session.post(mfa_url, headers=mfa_headers, json=mfa_data)
mfa_response.raise_for_status()

# 再次保存更新后的Cookie到文件
cookie_jar.save(ignore_discard=True, ignore_expires=True)

小提示

  • 如果你只是在同一个程序里连续发送请求,用第一种Session自动管理的方式就足够了,简洁高效。
  • ignore_discard=True和ignore_expires=True的作用和curl的行为一致:保存那些没有设置过期时间的临时Cookie,并且覆盖文件中已存在的Cookie条目。

备注:内容来源于stack exchange,提问作者devops-admin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:23:01