揭秘mimic gen:一个AI提示词如何把原始HTTP流量变成优雅Python客户端
【免费下载链接】mimicIntercept any app, then call it from Python like a library项目地址: https://gitcode.com/gh_mirrors/mimic32/mimic
mimic是一个让任意 App 都能被当作 Python 库调用的抓包工具:它用 mitmproxy 拦截你手机 App 的真实流量,再把这段原始 HTTP 请求交给 AI,由mimic gen命令一行生成一个可直接import的客户端文件。这篇文章带你拆开mimic gen的内部:一个精心设计的 AI 提示词(prompt)如何阅读真实流量,把零散的接口变成带命名方法、带参数、还能自动串联多步调用的优雅 Python 客户端。
mimic 三步流水线:捕获 → 提取 → 生成
mimic 的核心模型非常朴素,官方 README 用一行图就讲清楚了:
capture traffic -> extract auth -> generate client (mitmproxy) (mimic.Session) (AI reads the captured endpoints)- 捕获流量:
mimic record启动 mitmproxy,iPhone 按向导配置代理后正常刷 App,所有请求都会落到 mitmweb 的 JSON API 里。 - 提取认证:App 的每个请求都携带同一组稳定的身份头(Bearer token、设备 ID、Cookie)。extract.py 从你最新的真实请求中把这些头挑出来,之后重放的请求对服务器来说和真实客户端一模一样。
- 生成客户端:
mimic gen <host>把捕获到的端点整理成一份"摘要",喂给 AI 生成客户端。这一步就是本文的主角。
不想要代码生成的话,也可以手写:session.py 中的Session支持from_mitm、from_curl、from_har三种方式构建会话,跳过 AI 直接用。
mimic gen 命令做了什么
在 cli.py 中,gen子命令的流程是:
- 从 mitmweb(或
--har指定的 HAR 文件)拉取该主机的全部流量; - 调用 endpoints() 按
(method, path)去重,每个端点只保留最新一次捕获,连同请求体、响应体一起打包成端点列表; - 把主机名 + 端点列表拼成提示词,通过
claude或opencodeCLI 交给 AI; - 把 AI 返回的源码(顺便剥掉它偶尔包的 ```python 围栏,见 codegen.py)写入
<host前缀>_client.py。
响应体在进提示词前会先做两件贴心事(mitm.py):JSON 自动 pretty-print,让 AI 看到结构而不是噪音;超长内容截断到 4000 字符,避免把无关的大字段塞进上下文。
mimic record # 启动代理,打印 iPhone 配置步骤 mimic hosts # 列出捕获到的主机,挑出 API 主机 mimic learn prod-api.example.com # 先看看 mimic 看到了哪些端点 mimic gen prod-api.example.com # 生成 example_client.pyWeb 端用户不用代理也行:浏览器 DevTools 里"Save all as HAR",然后mimic gen api.example.com --har traffic.har,HAR 的解析逻辑在 har.py。
核心看点:那个提示词的 7 条规则
mimic gen的精华不在调用 AI 的代码,而在 codegen.py 里写死的这段 PROMPT。它把"什么样的输出才算好"翻译成了 7 条硬规则:
| # | 规则 | 为什么重要 |
|---|---|---|
| 1 | 只输出一个 Python 文件,不要散文和 markdown | 输出可直接落盘,无需二次清洗 |
| 2 | 子类化mimic.App,绝不硬编码 token/头 | 认证由基类自动从 mitmweb 拉取并刷新 |
| 3 | 方法名按"它做什么"命名(like、send_message),而非原始路径 | 这就是"优雅"二字的来源 |
| 4 | 发现端点间 ID/令牌依赖时串联调用(如先取 viewToken 再消费) | 移动端 API 普遍多步,规则逼 AI 去读样例请求体找依赖 |
| 5 | 每次调用都变的值(id、文本)→ 方法参数;对该用户恒定的值 → 默认值或实例状态 | 参数化边界清晰,调用时才需要传"会变"的东西 |
| 6 | 跳过纯埋点/分析/配置接口 | 过滤噪音,客户端保持精简 |
| 7 | 每个方法一行 docstring | 生成的代码可读、可维护 |
规则 4 是最有含金量的一条:它要求 AI"仔细读样例请求体,找出哪个字段的值来自另一个端点的返回值"。这正是把机械的接口列表升级为"懂业务流程"的客户端的关键——比如有个接口要传playerId,而playerId是登录接口的返回字段,AI 就会把取 ID 的逻辑写进方法内部或缓存到实例上。
端点列表则是用 build_digest() 渲染的,每个端点一个块:方法 + 路径 -> 状态码、query、请求体、响应体。流量再多,AI 看到的也是一份结构清晰的"端点说明书"。
生成的客户端为什么能"开箱即用"
生成的代码只是薄薄一层:它继承 App,实例化时自动调用Session.from_mitm(HOST),从 mitmweb 里捞出你的真实认证头。之后每个方法就是self.get(path)/self.post(path, json=body),返回解析好的 JSON。
更妙的是容错:request() 遇到 401 会自动重新从 mitmweb 拉取最新凭证并重试一次幂等请求(POST 需显式refresh=True)——token 轮换不再需要手动处理。所以生成的客户端用起来就像 README 开头那样简单:
from example_client import Example acc = Example() # 自动复用你捕获的会话 acc.get_recommendations() acc.like(subject_id, comment="hi lol")生成的文件就是普通 Python,可以随意编辑——AI 只是第一稿。
不想等 AI?先看提示词再决定
mimic gen --prompt-only会打印完整提示词而不调用 AI,方便你检查喂给模型的内容。也可以--generator opencode换生成器、--model换模型、-o指定输出路径(cli.py)。没有装任何 AI CLI 也不影响捕获流程,装好后运行mimic doctor检查环境即可。
边界:哪些 App 抓不到
- 证书固定(cert pinning):银行、Instagram 类 App 会拒绝 mitmproxy 证书,代理看不到流量。这挡的是"捕获"不是"重放",unpin 提供基于 Frida 的绕过,详见 docs/pinning.md。
- DPoP 令牌:每个请求带私钥签名的新鲜证明,捕获的请求无法重放,目前没有干净解法,详见 docs/dpop.md。
经验法则:mimic hosts里能看到 App 的 API 主机,就说明这条路走得通。
总结:提示词是产品,不是胶水
mimic gen给人的启发在于:AI 代码生成器的质量上限,由提示词里的约束决定。mimic 没有教 AI"写个客户端",而是把"不硬编码凭证、方法按意图命名、自动串联多步依赖、参数化易变值"这些领域经验写成了规则清单,再把干净的端点摘要喂进去。捕获负责"真实",提示词负责"优雅",二者结合才得到了那个一行import就能刷 App 的 Python 客户端。
项目使用 MIT 许可(LICENSE),安装只需sh install.sh(install.sh)。最后提醒一句官方伦理声明:请只用于自己的账号和数据,并遵守各 App 的服务条款。
【免费下载链接】mimicIntercept any app, then call it from Python like a library项目地址: https://gitcode.com/gh_mirrors/mimic32/mimic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考