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

使用Requests无法加载完整HTML,无法获取登录所需CSRF Token

解决Requests无法获取CSRF Token的问题

常见原因

  • JS动态生成Token:页面的CSRF Token是通过前端JavaScript动态插入到DOM中的,Requests作为纯HTTP请求库,不会执行页面JS,自然拿不到渲染后的Token,而浏览器和Selenium会执行JS,所以能看到。
  • 请求头不完整:服务器会根据请求头判断请求来源,若Requests发送的请求缺少关键头信息(比如User-Agent、Referer),可能返回简化版页面,不包含Token。
  • Token存储在Cookie中:有些站点的CSRF Token会先放在Cookie里,再由JS读取并插入到页面HTML中,直接用Requests获取页面HTML自然看不到,但Cookie里已经有值了。

解决方法

  • 检查响应Cookie:发送页面请求后,查看response.cookies,寻找类似csrf_token、XSRF-TOKEN的字段,直接提取这个值用于登录请求。示例代码:
    import requests
    
    session = requests.Session()
    response = session.get("目标页面URL")
    # 从Cookie中取Token
    csrf_token = session.cookies.get("csrf_token")
    
  • 补全请求头:复制浏览器的请求头(可在开发者工具的Network面板获取),添加到Requests请求中,确保服务器返回完整页面。示例:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
    }
    response = session.get("目标页面URL", headers=headers)
    # 再从HTML中提取Token
    
  • 抓包找Token接口:打开浏览器开发者工具,刷新页面时观察Network请求,看是否有专门获取Token的AJAX接口(比如/api/get-csrf-token),直接用Requests调用该接口获取Token。
  • 使用支持JS执行的工具:如果必须依赖JS生成Token,可以用playwright或pyppeteer这类轻量无头浏览器工具,它们能执行页面JS,获取渲染后的HTML中的Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:27:25