标签 XMLHttpRequest 下的文章

https://huodong.10155.com/h5/hdact5/basketballGame/#/

签到三天,第三天每次刷新增加一次投篮机会,理论上可以刷无限次投篮次数,bug有一定的时效性,有可能过几天就修复了,注意:只有签到满三天,在第三天的时候这个bug才会触发,第四天会重置,就不会触发这个逻辑漏洞

// 全局变量:记录执行次数和所有返回结果
let executeCount = 0; // 执行次数计数器
const requestResults = []; // 存储每次请求的返回结果

// 封装请求头配置,减少重复代码
function setCommonHeaders(xhr) {

  xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.setRequestHeader('Pragma', 'no-cache');
  xhr.setRequestHeader('Cache-Control', 'no-cache');
  xhr.setRequestHeader('accessToken', 'Bearer eb2cdded-2105-4833-86c6-6b27856c8dea');
  xhr.setRequestHeader('Accept-Language', 'zh-CN,zh;q=0.9');

}

// 第一个请求:开始挑战
function startChallenge() {
  // 每次执行计数器+1
  executeCount++;
  const currentExecId = executeCount; // 记录本次执行的序号
  console.log(`===== 第 ${currentExecId} 次执行 =====`);

  const requestData = JSON.stringify({
    "activityId": 1312,
    "mobile": "你的手机号"
  });

  const xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  // 初始化本次执行的结果记录
  const currentResult = {
    execId: currentExecId, // 执行序号
    time: new Date().toLocaleString(), // 执行时间
    firstRequest: null, // 第一个请求结果
    secondRequest: null // 第二个请求结果
  };

  xhr.addEventListener('readystatechange', function () {
    if (this.readyState === this.DONE) {
      // 处理第一个请求完成后的逻辑
      if (this.status >= 200 && this.status < 300) {
        try {
          const responseData = JSON.parse(this.responseText);
          console.log(`第 ${currentExecId} 次 - 第一个请求返回结果:`, responseData);
          currentResult.firstRequest = responseData; // 记录第一个请求结果

          // 确保获取到result后再执行第二个请求
          if (responseData.result) {
            challengeResultRecord(responseData.result, currentResult);
          } else {
            const errorMsg = `第 ${currentExecId} 次 - 第一个请求未返回result字段`;
            console.error(errorMsg, responseData);
            currentResult.firstRequest = { error: errorMsg, rawData: responseData };
            // 记录本次结果
            requestResults.push(currentResult);
          }
        } catch (e) {
          const errorMsg = `第 ${currentExecId} 次 - 解析第一个请求返回数据失败`;
          console.error(errorMsg, e);
          currentResult.firstRequest = { error: errorMsg, errorDetail: e };
          // 记录本次结果
          requestResults.push(currentResult);
        }
      } else {
        const errorMsg = `第 ${currentExecId} 次 - 第一个请求失败,状态码:${this.status}`;
        console.error(errorMsg);
        currentResult.firstRequest = { error: errorMsg, statusCode: this.status };
        // 记录本次结果
        requestResults.push(currentResult);
      }
    }
  });

  xhr.open('POST', 'https://huodong.10155.com/wo_activity/basketballCheck/startChallenge');
  setCommonHeaders(xhr);
  xhr.send(requestData);
}

// 第二个请求:提交挑战结果
function challengeResultRecord(challengeId, currentResult) {
  const currentExecId = currentResult.execId;
  const requestData = JSON.stringify({
    "id": challengeId,
    "hitCount": 8
  });

  const xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  xhr.addEventListener('readystatechange', function () {
    if (this.readyState === this.DONE) {
      // 处理第二个请求完成后的逻辑
      if (this.status >= 200 && this.status < 300) {
        try {
          const responseData = JSON.parse(this.responseText);
          console.log(`第 ${currentExecId} 次 - 第二个请求返回结果:`, responseData);
          currentResult.secondRequest = responseData; // 记录第二个请求结果
        } catch (e) {
          const errorMsg = `第 ${currentExecId} 次 - 解析第二个请求返回数据失败`;
          console.error(errorMsg, e);
          currentResult.secondRequest = { error: errorMsg, errorDetail: e };
        }
      } else {
        const errorMsg = `第 ${currentExecId} 次 - 第二个请求失败,状态码:${this.status}`;
        console.error(errorMsg);
        currentResult.secondRequest = { error: errorMsg, statusCode: this.status };
      }
      // 记录本次完整结果
      requestResults.push(currentResult);
      console.log(`===== 第 ${currentExecId} 次执行完成,累计执行 ${executeCount} 次 =====`);
    }
  });

  xhr.open('POST', 'https://huodong.10155.com/wo_activity/basketballChallengeTime/challengeResultRecord');
  setCommonHeaders(xhr);
  xhr.send(requestData);
}

// 定时执行函数:每0.5秒执行一次startChallenge
function startScheduledExecution() {
  // 立即执行第一次
  startChallenge();
  
  // 之后每0.5秒执行一次(1000毫秒 = 1秒)
  setInterval(() => {
    startChallenge();
  }, 500);

  // 提供查看结果的辅助函数
  window.getExecutionResults = function() {
    console.log('===== 所有执行结果汇总 =====');
    console.log(`累计执行次数:${executeCount}`);
    console.log('执行详情:', requestResults);
    return {
      totalCount: executeCount,
      results: requestResults
    };
  };

  console.log('定时任务已启动,每0.5秒执行一次!');
  console.log('可调用 getExecutionResults() 查看所有执行记录');
}

// 启动定时执行
startScheduledExecution();

📌 转载信息
转载时间:
2026/1/3 14:40:47