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

Python requests请求转JavaScript fetch后请求不一致问题求助

核心差异点

  1. 请求体序列化后长度不一致:JS返回的Content-Length是27,Python是28,说明两边的JSON序列化结果有差异
  2. JS请求多了accept-language头,user-agent是Expo专属标识,accept-encoding多了br压缩支持
  3. 注意确认两边的X-Scope取值是否完全一致

解决步骤

  • 优先校验请求体内容是否一致
    分别输出两边序列化后的JSON字符串做对比:
    JS侧执行:console.log(JSON.stringify({signature: studentId}))
    Python侧执行:import json; print(json.dumps({"signature": studentId}))
    大概率是studentId的类型两边不统一:比如JS侧是数字类型,Python侧是字符串类型,导致JSON结果里少了引号,长度不一致。如果是这个问题,统一把studentId转成和Python侧相同的类型即可,比如如果Python用的是字符串,JS侧就改成{signature: String(studentId)}。
  • 手动对齐请求头
    fetch在Expo/浏览器环境下会自动添加很多默认头,如果后端对请求头做了严格校验,可以手动覆盖这些头和Python侧保持一致,修改后的代码如下:
    const fetchData = async () => {
      // 统一studentId类型,和Python侧保持一致
      const reqBody = JSON.stringify({signature: String(studentId)});
      const response = await fetch("URL", {
        method: "POST",
        headers: {
          "X-Scope": "SOME NUMBERS",
          "Content-Type": "application/json",
          "User-Agent": "python-requests/2.26.0",
          "Accept-Encoding": "gzip, deflate",
          "Accept": "*/*"
        },
        body: reqBody,
      });
      // 补充响应处理逻辑,原代码没有解析响应结果
      const result = await response.json();
      return result;
    };
    
  • 最后校验X-Scope的取值两边是否完全相同,你提供的请求日志里JS侧取值为X_SCOPE_CODE,Python侧为X_SCOPE,确认是否是配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:18:03