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

使用Requests库获取csrftoken成功却无法获取session id的原因

为什么requests库能获取csrftoken但拿不到session_id?

可能的原因及解决办法:

  • 登录请求未通过验证:服务器仅在登录成功后才会生成session_id。先检查响应状态码(比如执行print(post.status_code)),若返回200大概率是登录失败。对比浏览器发送的表单数据,确认this_is_the_login_form等参数的值是否正确(比如浏览器中该字段可能是固定值"1",需确保代码里正确赋值)。
  • Session对象未连续复用:必须用同一个session对象先GET登录页面(获取csrftoken和初始Cookie),再POST登录请求。中途新建session会丢失上下文,导致服务器不生成session_id。
  • 请求头或Cookie缺失:浏览器会自动带上之前的Cookie,requests的session默认会处理,但手动修改headers或Cookie可能导致必要字段丢失。可对比浏览器的请求头、Cookie与代码中的内容,确保一致。
  • 服务器未返回session_id:打印响应的Set-Cookie头(print(post.headers.get('Set-Cookie'))),若没有session_id相关内容,说明登录请求未被服务器认可;若有但session.cookies中不存在,可能是Cookie的domain/path设置问题,需手动查看处理。
  • 证书验证异常:使用verify=False可能导致服务器返回错误页面而非登录成功响应,建议尝试导入对应证书信任后再测试。

代码优化提示:

确保POST登录请求前,已用同一个session对象访问过登录页面:

session = requests.Session()
# 先GET登录页面,获取csrftoken和初始Cookie
login_page = session.get("https://www.postgresql.org/account/login/?next=/account/")
# 从响应中提取csrftoken(可通过BeautifulSoup或正则提取)
csrfmiddlewaretoken = ... 
# 再执行登录POST请求
post = session.post("https://www.postgresql.org/account/login/", data=payload, headers=headers)

内容的提问来源于stack exchange,提问作者STBA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:58:31