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

使用Python-requests对ASP架构aspx网站做身份验证失败问题咨询

登录失败原因排查

整理出以下几个核心错误点:

  • Payload编码错误:你手动拼接urlencoded格式的POST请求体,__VIEWSTATE、__EVENTVALIDATION两个参数本身包含/、+、=等URL特殊字符,直接格式化拼接会导致编码错误,服务端无法正确解析参数直接判定请求非法。requests库的data参数传入字典时会自动完成URL编码,无需手动拼接字符串。
  • 请求头一致性校验失败:登录POST请求的User-Agent为Chrome 91版本,后续跳转GET请求的User-Agent修改为了Chrome 92版本,ASP.NET服务端通常会校验同一会话的请求头特征,UA不一致会被判定为异常会话直接清除登录状态。
  • Cookie手动覆盖问题:requests的Session实例会自动管理同一会话下的所有Cookie,你在第二次GET请求时手动指定了仅包含ASP.NET_SessionId的Cookie头,覆盖了Session中登录成功后服务端返回的表单认证Cookie(一般为.ASPXAUTH),导致请求无有效身份凭证被重定向回登录页。
  • 路径大小写问题:观察登录成功的跳转路径为小写的/tms/前缀,你跳转的目标地址如果使用大写/TMS/前缀,部分部署在Linux环境的ASP.NET服务会因路由大小写敏感判定路径非法,跳转回登录页。
修正后的代码示例
import requests
from bs4 import BeautifulSoup

# 配置参数
login_url = "https://portal-vesta.sequoialog.com.br/tms/LoginPortal.aspx"
home_url = "https://portal-vesta.sequoialog.com.br/tms/HomePortal.aspx?Usu=1070rpr"
user = "你的账号"
password = "你的密码"
# 统一UA,全程保持一致
UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"

def get_ev_vs(page):
    soup = BeautifulSoup(page.text, 'html.parser')
    vs = soup.select_one('#__VIEWSTATE')['value']
    ev = soup.select_one('#__EVENTVALIDATION')['value']
    return ev, vs

with requests.Session() as s:
    s.headers.update({"User-Agent": UA})
    # 获取初始化参数
    init_page = s.get(login_url)
    ev, vs = get_ev_vs(init_page)
    # 构造POST payload用字典,自动编码
    post_payload = {
        "Ajax": "UpdatePanel1|Button1",
        "Button1": "ENTRAR",
        "__ASYNCPOST": "true",
        "__EVENTARGUMENT": "",
        "__EVENTTARGET": "",
        "__EVENTVALIDATION": ev,
        "__LASTFOCUS": "",
        "__VIEWSTATE": vs,
        "txtSenha": password,
        "txtUsuario": user,
        "txtUsuarioSolicita": ""
    }
    post_headers = {
        'Cache-Control': 'no-cache',
        'X-MicrosoftAjax': 'Delta=true',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Accept': '*/*'
    }
    # 提交登录
    login_resp = s.post(login_url, data=post_payload, headers=post_headers)
    # 校验登录结果
    if "HomePortal.aspx" in login_resp.text:
        print("登录成功")
        # 直接用Session访问目标页,无需手动加Cookie和UA
        home_resp = s.get(home_url)
        print(home_resp.text)
    else:
        print("登录失败,返回内容:", login_resp.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:57:02