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

Rosetta Stone B1级别Node.js脚本请求捕获与报错修复求助

解决Rosetta Stone B1课程刷课脚本的请求捕获与错误修复问题

一、捕获B1课程所需的请求

  1. 切换抓包过滤规则
    打开浏览器DevTools的Network面板,勾选Preserve Log,将过滤器切换为Fetch/XHR,同时搜索关键词graphql——B1课程大概率改用GraphQL接口替代了A1-A2时期的graphic/tracking REST请求。
  2. 定位核心请求
    手动完成一个B1课程的小练习,观察Network面板中触发的POST请求:
    • 寻找包含mutation关键字的请求(这类是提交进度的核心接口)
    • 记录请求的URL、请求头(尤其是Authorization、Cookie)、请求体中的GraphQL查询语句和变量结构
  3. 提取关键参数
    重点关注请求体里的clientInfo字段(这是后续修复脚本的关键),以及lessonId、activityId、score等与课程进度相关的参数。

二、修复"Client info is not defined"脚本错误

  1. 补充缺失的clientInfo参数
    从抓包得到的请求体中复制完整的clientInfo结构,通常格式如下:
    "clientInfo": {
      "clientVersion": "3.14.0",
      "platform": "web",
      "deviceId": "xxxx-xxxx-xxxx-xxxx"
    }
    
    将该参数添加到脚本的GraphQL变量中,确保与官方请求的结构完全一致。
  2. 完善脚本的请求格式
    将原脚本适配为GraphQL请求模式,示例代码如下:
    const fetch = require('node-fetch');
    
    const submitB1Progress = async () => {
      // 从抓包获取的GraphQL mutation语句
      const query = `
        mutation SubmitActivityProgress($input: SubmitActivityProgressInput!) {
          submitActivityProgress(input: $input) {
            success
            progress
          }
        }
      `;
    
      // 从抓包提取的变量,包含必填的clientInfo
      const variables = {
        input: {
          lessonId: "b1_lesson_001",
          activityId: "b1_activity_001",
          score: 100,
          clientInfo: {
            clientVersion: "3.14.0",
            platform: "web",
            deviceId: "xxxx-xxxx-xxxx-xxxx"
          }
        }
      };
    
      try {
        const res = await fetch('https://api.rosettastone.com/graphql', {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer YOUR_ACCESS_TOKEN', // 从请求头复制
            'Content-Type': 'application/json',
            'Cookie': 'YOUR_COOKIE_FROM_BROWSER' // 可选,部分认证依赖Cookie
          },
          body: JSON.stringify({ query, variables })
        });
    
        const data = await res.json();
        if (data.errors) throw new Error(JSON.stringify(data.errors));
        console.log("进度提交成功:", data.data.submitActivityProgress);
      } catch (err) {
        console.error("请求失败:", err.message);
      }
    };
    
    submitB1Progress();
    
  3. 处理空指针异常
    在脚本中添加try/catch块,捕获API返回的错误信息,避免因接口报错导致的空指针崩溃。同时检查脚本中是否有未初始化的变量,确保所有依赖参数(如token、clientInfo)都已正确赋值。
  4. 验证认证信息有效性
    确认脚本中的Authorization头(Bearer token)与浏览器抓包的一致,部分token会有有效期,若出现认证失败,重新从浏览器请求中提取最新的token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:50:02