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

Node.js superagent异步登录iracing站点失败问题咨询

iRacing会员站登录代码调整方案

原有代码失效是因为站点新增了反爬校验、表单参数校验和提交前预处理逻辑,按以下步骤调整即可正常完成登录:

1. 前置获取会话Cookie

不要直接发起登录POST请求,必须先GET访问登录页面,接收站点返回的JSESS_*、AWSALB、XSESSIONID等初始会话Cookie,后续所有请求都需要携带这批Cookie。

建议直接使用superagent.agent()创建开启Cookie持久化的会话实例,所有请求都通过该实例发送,自动维护Cookie池,无需手动存取Cookie。

2. 补全必填请求头

原有代码仅设置了Content-Type,缺少站点强制校验的核心请求头,必须补充以下字段:

  • User-Agent:使用真实桌面浏览器的UA值,例如抓包获取的Chrome 102版本UA,禁止使用superagent默认的客户端标识
  • Referer:固定值为https://members.iracing.com/membersite/login.jsp
  • Origin:固定值为https://members.iracing.com
  • Accept:填浏览器标准值text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    其余sec-fetch-*类头属于浏览器自动携带字段,可选择性补充,非强制要求。

3. 补全表单参数、适配提交预处理逻辑

原有代码仅传用户名、明文密码,缺少必填参数,且未适配表单提交前的JS处理逻辑:

  • 补充隐藏字段utcoffset:值为当前时区偏移分钟数,和JS原生方法new Date().getTimezoneOffset()返回值一致,例如东八区值为-480
  • 补充隐藏字段todaysdate:值为提交当日的日期字符串,格式匹配站点JS逻辑即可,一般为YYYY-MM-DD格式
  • 适配密码哈希逻辑:表单绑定的submitHashedLoginForm()方法会对明文密码做哈希处理后再提交,不能直接传明文密码,需要提取页面中该函数的JS逻辑,在Node侧复现哈希计算过程,将计算后的哈希值作为password字段提交
  • AUTOLOGIN为可选字段,不需要自动登录功能可以不传,需要的话传值on即可

4. 适配302跳转逻辑

登录接口返回302是正常现象,superagent默认会自动跟随跳转至会员首页,不需要额外处理,只要确保会话实例的Cookie持久化正常,跳转后就能正常携带鉴权Cookie访问受保护页面。

调整后的参考代码

// 创建开启Cookie持久化的会话实例
const agent = superagent.agent();
const login2 = async () => {
  // 第一步:访问登录页获取初始Cookie
  await agent.get('https://members.iracing.com/membersite/login.jsp')
    .set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36');
  
  // 复现页面JS的密码哈希逻辑,处理明文密码得到哈希值
  const hashedPassword = 密码哈希计算结果;
  const utcOffset = new Date().getTimezoneOffset();
  const today = new Date().toISOString().split('T')[0]; // 按站点实际要求调整日期格式

  // 第二步:发起登录POST请求
  let dashboard = await agent
    .post('https://members.iracing.com/membersite/Login?test')
    .send({ 
      username: username, 
      password: hashedPassword,
      utcoffset: utcOffset,
      todaysdate: today
    })
    .set('Content-Type', 'application/x-www-form-urlencoded')
    .set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36')
    .set('Referer', 'https://members.iracing.com/membersite/login.jsp')
    .set('Origin', 'https://members.iracing.com')
    .set('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');
  
  // 后续所有会员接口请求都复用agent实例发送,自动携带登录态
  return dashboard;
}

常见排查点

如果调整后还是登录失败,优先检查两个点:

  • 密码哈希逻辑是否和页面JS完全一致,包括哈希算法、拼接的盐值、编码格式,这部分是最高发的错误点
  • 请求头字段、Cookie值是否和浏览器抓包结果匹配,部分反爬规则会校验头字段顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:33:22