圆山中庸 2026-02-28 19:50 采纳率: 98.7%
浏览 2
已采纳

如何正确调用 https://emappdata.eastmoney.com/stockrank/getHisProfileList 接口获取历史个股排名数据?

常见问题:调用东财 `getHisProfileList` 接口时频繁返回空数据(如 `{"data":[]}` 或 `{"code":400,"msg":"参数错误"}`),且无明确报错提示。根本原因在于该接口**强依赖动态请求头与加密参数校验**:① 必须携带有效的 `User-Agent`、`Referer`(需为东财App或合规H5域名)、`X-Request-ID` 及时效性 `timestamp`;② `params` 中的 `date` 需为 YYYYMMDD 格式且仅支持近30个交易日(非自然日);③ 关键字段 `pageNo`、`pageSize` 须为整数,`pageSize` 超过100将被截断;④ 更隐蔽的是,部分时段需附带 `deviceid` 或 `sign` 签名(基于时间戳+salt+固定key的MD5/HMAC)。未模拟真实App环境(如缺失 `appVersion=13.2.0`、`os=android` 等Header)亦会导致静默失败。调试时建议先抓包比对官方App请求,再复现完整上下文,而非仅拼接URL。
  • 写回答

1条回答 默认 最新

  • 诗语情柔 2026-02-28 19:50
    关注
    ```html

    一、现象层:表征异常——空响应与静默失败的典型模式

    调用东财 getHisProfileList 接口时,高频出现 {"data":[]}{"code":400,"msg":"参数错误"},且无 HTTP 状态码异常(如 403/500)或详细错误字段。该现象非偶发性网络抖动,而是具备强周期性(如每日早盘9:15–9:25集中失败)、环境强敏感性(本地调试成功、生产环境失败)和请求幂等性失效(相同参数重试仍失败)三大特征。

    二、协议层:Header 动态校验机制深度解析

    该接口采用多维 Header 白名单策略,缺失任一关键字段即触发“静默降级”:

    • User-Agent:必须匹配东财 App 真实 UA(如 "EastMoneyApp/13.2.0 (iPhone; iOS 17.5; Scale/3.0)"),伪造为浏览器 UA 将被拦截;
    • Referer:仅接受 https://app.eastmoney.com/https://quote.eastmoney.com/ 等白名单域名,空值或通用 H5 域名(如 localhost)直接拒收;
    • X-Request-ID:需为 UUID v4 格式(如 "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8"),重复 ID 在 5 分钟窗口内视为重放攻击;
    • timestamp:服务端校验与服务器时间偏差 ≤ 300 秒,超出则返回 400 且不提示时差问题。

    三、参数层:业务规则与风控逻辑的隐式耦合

    请求体(JSON)中 params 字段存在四重校验链:

    字段格式要求风控逻辑典型陷阱
    dateYYYYMMDD(如 "20240520"仅支持近30个交易日(非自然日),需查证交易所日历传入周末/节假日 → 返回空数组而非报错
    pageNo正整数(≥1)非数字字符串(如 "1")触发类型校验失败前端 JS 默认转字符串导致静默截断
    pageSize整数(1–100)>100 时自动截为 100,但不返回 warning 字段预期取 200 条却只获 100 条,误判为数据缺失

    四、安全层:动态签名与设备指纹的协同验证

    自 2024Q2 起,东财后端引入分级风控策略:当请求频率 ≥ 3 次/秒 或 IP 近 1 小时请求量 ≥ 500 次时,强制校验 sign 字段。其生成逻辑为:

    sign = HMAC-SHA256(
      key = "eastmoney_salt_2024_v3", 
      message = timestamp + "|" + salt + "|" + appVersion + "|" + os
    )

    其中 salt 为每次请求生成的 8 位随机字符串(需透传至服务端),appVersionos 必须与 Header 中一致(如 appVersion: "13.2.0", os: "android")。

    五、诊断层:抓包比对法的标准化实施流程

    推荐使用 Charles Proxy + SSL Proxying 抓取东财官方 App 流量,执行以下步骤:

    1. 启动 App 并进入「历史行情」页,触发 getHisProfileList 请求;
    2. 导出完整请求(含 Headers、Body、Query Params)为 HAR 文件;
    3. 用 Python 脚本自动化比对:校验 Header 键全集、timestamp 时效性、sign 生成一致性;
    4. 构造最小差异请求:仅修改一个变量(如仅改 date),定位失效边界。

    六、工程层:高可用客户端 SDK 设计范式

    为规避人工维护成本,建议封装为可插拔式 SDK,核心模块如下:

    graph TD A[请求发起] --> B{风控等级检测} B -->|低频| C[基础Header注入] B -->|高频| D[动态签名生成] C --> E[交易所日历校验date] D --> E E --> F[参数类型强转
    pageNo→int, pageSize→int] F --> G[发送请求] G --> H[响应解码
    空data→检查date是否为交易日]

    七、演进层:反爬策略升级趋势预判

    基于 2024 年东财 APK 逆向分析,下一阶段可能引入:
    ① TLS 指纹绑定(JA3/JA3S 校验);
    ② WebView 内核特征检测(如 navigator.webdriver 值);
    ③ 设备传感器噪声注入(加速度计/陀螺仪随机值参与 sign 计算);
    ④ 行为序列建模(点击流时序特征作为风控输入)。建议在 SDK 中预留 sensorData 和 tlsFingerprint 扩展点。

    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月1日
  • 创建了问题 2月28日