如何正确调用 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。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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 位随机字符串(需透传至服务端),appVersion和os必须与 Header 中一致(如appVersion: "13.2.0",os: "android")。五、诊断层:抓包比对法的标准化实施流程
推荐使用 Charles Proxy + SSL Proxying 抓取东财官方 App 流量,执行以下步骤:
- 启动 App 并进入「历史行情」页,触发
getHisProfileList请求; - 导出完整请求(含 Headers、Body、Query Params)为 HAR 文件;
- 用 Python 脚本自动化比对:校验 Header 键全集、timestamp 时效性、sign 生成一致性;
- 构造最小差异请求:仅修改一个变量(如仅改 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 扩展点。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- User-Agent:必须匹配东财 App 真实 UA(如