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

如何使用Python Requests登录多页面CAS认证系统?

用Python Requests登录TAMU分步式CAS系统

我之前处理过这种分两步输入用户名/密码的CAS登录场景,咱们一步步来实现:

核心思路

这个CAS系统把登录拆成了两个阶段:

  1. 提交用户名后,系统验证用户存在,才展示密码输入框
  2. 提交密码完成最终认证

我们需要用requests.Session()来维持会话(自动管理Cookie),并且在每个阶段解析页面里的隐藏表单参数(CAS登录必须的lt、execution、_eventId等)。

具体实现步骤

首先确保你安装了必要的库:

pip install requests beautifulsoup4

然后是代码示例:

import requests
from bs4 import BeautifulSoup

# 配置你的账号信息
USERNAME = "你的TAMU用户名"
PASSWORD = "你的TAMU密码"
LOGIN_URL = "https://cas.tamu.edu/cas/login"
SERVICE_URL = "https://howdy.tamu.edu/uPortal/Login"

# 初始化会话,模拟浏览器请求头
session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
})

def get_form_params(html_content):
    """解析HTML页面,提取CAS登录所需的隐藏表单参数"""
    soup = BeautifulSoup(html_content, "html.parser")
    form = soup.find("form", {"id": "fm1"})
    params = {}
    # 提取所有隐藏输入字段
    for input_tag in form.find_all("input", type="hidden"):
        params[input_tag.get("name")] = input_tag.get("value")
    return params

try:
    # 第一步:访问初始登录页面,获取初始表单参数和Cookie
    initial_response = session.get(LOGIN_URL, params={"service": SERVICE_URL, "renew": "true"})
    initial_params = get_form_params(initial_response.text)
    
    # 添加用户名到参数,提交第一阶段请求
    initial_params["username"] = USERNAME
    first_submit_response = session.post(LOGIN_URL, data=initial_params, params={"service": SERVICE_URL, "renew": "true"})
    
    # 第二步:解析密码页面的表单参数
    password_page_params = get_form_params(first_submit_response.text)
    
    # 添加密码到参数,提交第二阶段请求
    password_page_params["password"] = PASSWORD
    final_response = session.post(LOGIN_URL, data=password_page_params, params={"service": SERVICE_URL, "renew": "true"})
    
    # 验证登录是否成功:访问Howdy主页看看
    howdy_response = session.get("https://howdy.tamu.edu/uPortal/")
    if "Welcome" in howdy_response.text:
        print("登录成功!")
    else:
        print("登录失败,请检查账号信息或CAS页面结构是否变化")

except Exception as e:
    print(f"请求过程出错: {str(e)}")

关键注意事项

  • 会话维持:必须用requests.Session(),它会自动保存和发送Cookie,这是CAS认证的核心
  • 表单参数:CAS的每个登录请求都需要lt(登录票据)、execution(会话ID)这些动态生成的参数,不能硬编码,必须从页面解析
  • 请求头:一定要设置合理的User-Agent,否则CAS系统可能会拦截非浏览器请求
  • 页面结构变化:如果后续TAMU修改了CAS页面的表单字段ID或参数名,需要重新调整get_form_params函数里的解析逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:53:47