很多人尝试直接把浏览器开发者工具里复制的 Cookie 字符串拼进请求里,结果大概率会翻车。为什么?因为现在的网站没那么好糊弄,它们会校验 SameSiteHttpOnly 这些标志位,甚至还会比对请求头里的 user-agent 和 TLS 指纹。所以,更靠谱的思路其实不是“手动复制”,而是让 Python 直接去用浏览器当前会话的 Cookie 缓存——这才是正解。

核心思路很简单:让 Python 的 requests 用和浏览器一模一样的 Cookie 存储路径。比如 Chrome 的 Default/Cookies 这个 SQLite 文件,里面就存着已经登录好的、加密过的 Cookie。你需要做的,就是把它读出来,再解密。

用 browsercookie3 自动提取已登录 Cookie

browsercookie3 是目前最省力的方案。它不依赖 Selenium,也不用抓包,就是纯读取本地 Cookie 数据库再解密。安装完后,一行代码就能拿到一个带着登录态的 requests.Session,非常直接。

实际操作步骤:

import requests
import browsercookie3

# 自动读取 Chrome 的登录 Cookie(Firefox/Edge 则用对应的函数名)
cj = browsercookie3.chrome()  # 或 browsercookie3.firefox()

session = requests.Session()
session.cookies.update(cj)

# 现在发请求,就带着有效的登录态了
resp = session.get("https://www.php.cn/link/fad68ee497f1cf9108b630e7ce630e6c")
print(resp.status_code)  # 200 表示一切顺利

为什么 requests.Session 比 requests.get 更关键

不少新手习惯在每个 requests.get(url, cookies=...) 里单独传 Cookie,但这其实是个大坑。因为登录态并不是一成不变的,它依赖服务端在多轮响应里通过 Set-Cookie 动态更新字段,比如 _xsrfsessionid 这些都可能变。

常见失败原因和绕过技巧

哪怕 Cookie 看起来完全正确,有时还是会返回 403,或者直接跳回登录页。这不一定是 Cookie 无效,很可能是服务端还做了别的校验。

说到底,真正难的不是“怎么传 Cookie”,而是搞清楚哪些字段是静态缓存的,哪些是每次请求动态生成的,还有哪些校验根本绕不过去。别光盯着登录按钮点一下就完事,多看看响应头,多翻翻 Network 面板里的真实请求链路,才是正经事。

本文转载于:https://www.php.cn/faq/2342556.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。