标签 网络请求 下的文章

我是不相信第三方 API(主要是收费),所以自己找了一下
天气网: https://www.weather.com.cn/

image
打开网站,抓包就能看到怎么获取的,还可以白嫖 IP whois,这样就可以根据 IP 获取用户位置再查天气。
天气信息: https://d1.weather.com.cn/weather_index/101200101.html?_=1769051590198
这里怎么解析我就不赘述了,既然来这个论坛,解析这些数据都不是问题。
1、这个请求防盗链,需要加上 referer。
2、这个 101200101 怎么来的?

第一个问题看看就知道了,这里只说第二个问题。
101200101 这个不是随便编的 id,这个数字是城市代码
中国国家气象局天气预报信息接口: https://www.cnblogs.com/youlixishi/articles/3612035.html
中国天气网城市代码: https://blog.csdn.net/weixin_30492047/article/details/98287973

如果只是网上搜,那就是玄阶功法了,毕竟网上信息不一定及时,行政区划会有变化。
直接去爬
https://topic.alibabacloud.com/a/china-weather-net-interface-font-colorredreturnfont-font-colorredjsonfont-format-parsing-and-interface-xml-picture-interface-description_1_11_30654886.html
获取省级代码: http://www.weather.com.cn/data/list3/city.xml?level=1
比如湖北是 20
获取城市代码: https://www.weather.com.cn/data/list3/city20.xml?level=2
比如武汉市是 2001
获取区代码: https://www.weather.com.cn/data/list3/city2001.xml?level=3
这里城市天气代码,不是行政区划,所以有的没有(可能数据没更新,反正是顺序递增)
最终就是 101+20+01+01
打开报错是吧?
image
楼主,打开报错了。
那是因为显示的.xml 实际上不是 xml 文件,浏览器当 xml 渲染当然报错,直接查看源代码。
image
直接 view-source
image
简易信息

有个视频网站学习的时候不点暂停或者视频学完,就一直没有任何包,也没有心跳包,也不会更新视频学习进度学时。

点暂停或者视频学习完了,就会更新视频学习的进度学时。

点暂停没有包,点继续就也只会有一个下载 mp4 的包。

有大神知道这是如何更新视频学习进度 的吗

复制
curl -X 'POST' \
  'https://apis.shikangsi.com/api/v2/bilibili/detail' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://www.bilibili.com/video/BV1Th411A7Yt/"
}'

url 支持长短链接
获取 B 站视频基础信息的 api1

因为要过风控和服务器性能原因,速度没有那么快。

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