Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

apipeek

一个更省心的 HTTP/HTTPS API 抓包工具

   █████╗ ██████╗ ██╗██████╗ ███████╗███████╗██╗  ██╗
  ██╔══██╗██╔══██╗██║██╔══██╗██╔════╝██╔════╝██║ ██╔╝
  ███████║██████╔╝██║██████╔╝█████╗  █████╗  █████╔╝
  ██╔══██║██╔═══╝ ██║██╔═══╝ ██╔══╝  ██╔══╝  ██╔═██╗
  ██║  ██║██║     ██║██║     ███████╗███████╗██║  ██╗
  ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝     ╚══════╝╚══════╝╚═╝  ╚═╝

      $ apipeek --host 0.0.0.0 --port 8888
      > filter static noise · keep JSON / form / GraphQL
      > output: ./out/requests.jsonl · ./out/requests.har

自动过滤图片、字体、埋点和静态资源,只保留接口请求,并输出为 JSONL / HAR。

Python 3.10+ mitmproxy 10+ Platform HTTPS Capture JSONL / HAR MIT License GitHub Release

快速开始 · Windows 便携版 · 开发者用法 · 抓包流程 · 输出格式 · 常见问题


这是什么

apipeek 是对 mitmproxy 的一层轻量封装,目标只有一个:

让“把小程序 / App / 网页里真正的接口请求抓下来”这件事变简单。

它会自动:

  • 启动 mitmwebmitmdump
  • 过滤图片、视频、字体、CSS、预检请求、常见埋点噪声
  • 保留 JSON、表单、XML、GraphQL、REST 风格请求
  • 实时写入结构化 JSONL,也可导出 HAR
  • 支持按目标保存配置,下次一键启动

它不是自动化脚本平台,也不负责破解证书绑定;它专注做一个便捷、可读、可扩展的抓包工具。

两种使用方式

人群 推荐方式 是否需要写代码
普通用户 / 测试同学 下载 Windows 便携版,双击 bat 不需要
开发者 pip install -e . 后使用 apipeek 命令,或直接引用插件 需要一点命令行基础

快速开始

Windows 便携版

适合全新电脑、不想安装 Python 的用户。

  1. 到 Releases 下载 apipeek-portable-x.x.x.zip
  2. 解压到任意目录
  3. 双击:
    • 安装证书.bat:首次安装 mitmproxy 根证书
    • 启动抓包.bat:启动抓包并打开 Web 界面
  4. 手机或电脑设置代理:
    • 本机:双击 开启系统代理.bat
    • 手机:Wi-Fi 代理填写当前电脑 IP 和端口 8888
  5. 手机浏览器访问 http://mitm.it 安装手机端证书
  6. 打开目标小程序 / App,结果会实时保存到 out/requests.jsonl

抓完后:

  • 关闭 启动抓包.bat 窗口
  • 双击 关闭系统代理.bat
  • 不再使用时可双击 卸载证书.bat

便携版目录说明见 packaging/portable/README.md

开发者用法

要求 Python 3.10+。

git clone <your-repo-url>
cd apipeek
python -m venv .venv
.venv\Scripts\activate    # Windows
# source .venv/bin/activate  # macOS / Linux

pip install -e .
apipeek

启动后默认监听 127.0.0.1:8888,并打开 http://127.0.0.1:8081

如果要抓手机流量,改成监听所有网卡:

apipeek -H 0.0.0.0

抓包流程

  1. 启动 apipeek
  2. 把浏览器、手机或其他设备代理指向它
  3. 信任 mitmproxy 证书
  4. 操作目标小程序 / App / 网页
  5. 在 mitmweb 页面查看实时流量
  6. out/ 目录拿结构化结果

注意:HTTPS 抓包必须在被测设备上信任 mitmproxy 根证书。部分 App 使用证书绑定(SSL Pinning),即使安装证书也无法看到明文,这不是本工具能绕过的问题。

输出长什么样

默认生成 out/capture.jsonl,每行一个完整 JSON:

{
  "ts": 1787401895,
  "method": "POST",
  "scheme": "https",
  "host": "api.example.com",
  "path": "/v1/task/complete",
  "url": "https://api.example.com/v1/task/complete",
  "status": 200,
  "req_headers": {
    "cookie": "...",
    "content-type": "application/json"
  },
  "req_body": "{\"taskId\":\"abc\"}",
  "res_headers": {
    "content-type": "application/json"
  },
  "res_body": "{\"code\":0,\"message\":\"ok\"}"
}

这种格式适合:

  • grep / rg 搜索关键词
  • jq 提取字段
  • Python pandas.read_json(..., lines=True)
  • 导入后续分析工具
  • 从请求头中复制 Cookie / Token

配置文件

配置文件是 TOML,用来保存某个目标的抓包规则。

apipeek -p wechat-mini
apipeek -p mobile-app

也可以在配置基础上临时覆盖:

apipeek -p wechat-mini --include-host api.example.com -o ./run1

内置示例:

  • examples/profiles/wechat-mini.toml
  • examples/profiles/mobile-app.toml

配置文件查找顺序:

  1. ./profiles/NAME.toml
  2. ./profiles/NAME.json
  3. ~/.config/apipeek/profiles/NAME.toml

查看当前可用配置:

apipeek --list-profiles

常用参数

-H, --host            代理监听地址,默认 127.0.0.1;抓手机用 0.0.0.0
-P, --port            代理监听端口,默认 8888
    --no-web          使用 mitmdump,不打开浏览器界面
    --web-port        mitmweb 界面端口,默认 8081
-o, --out             输出目录,默认 ./out
-f, --format          jsonl | har | both
    --name            输出文件名前缀,默认 capture
    --include-host    只保留包含该关键词的 Host,可重复
    --exclude-host    排除包含该关键词的 Host,可重复
    --include-path    始终保留的路径关键词,可重复
    --exclude-path    始终排除的路径关键词,可重复
    --max-body        单条请求 / 响应体最大保留长度,默认 200000
    --pretty          控制台打印简短响应预览
-q, --quiet           关闭实时日志

过滤规则

默认过滤逻辑:

  1. 丢弃 OPTIONSHEADCONNECT
  2. 命中 exclude_hosts 的 Host 直接丢弃
  3. 如果设置了 include_hosts,只保留匹配的 Host
  4. 丢弃图片、视频、音频、字体、CSS、二进制下载
  5. 路径像接口的请求优先保留,例如 /api//v1//graphql.do
  6. 响应类型像 JSON、表单、XML、纯文本的请求保留
  7. POSTPUTPATCHDELETE 等写操作请求优先保留
  8. 其他静态或无意义请求默认丢弃

可以在 TOML 配置里调整关键词列表。

输出格式

格式 说明
jsonl 默认格式,追加写入,一行一个 JSON,适合实时查看和脚本处理
har 退出时生成 HAR 1.2,可直接拖进 Chrome DevTools 或 HAR 查看器
both 同时输出 JSONL 和 HAR
apipeek -f both

K8s / 服务器里能跑吗

可以,但容器里使用的是 Python / 镜像版本,不是 Windows 便携版的 .exe

最常见的方式是把它作为正向代理部署:

  • 部署一个 mitmdump Service
  • 业务容器设置 HTTP_PROXY / HTTPS_PROXY
  • 通过 PVC 保存抓包结果,或让插件转发到对象存储 / Kafka

它不是节点级全局抓包器。如果要透明拦截整个 Pod / Node 的流量,还需要 sidecar、iptables、CNI、eBPF 或服务网格配合。

安全与合规

  • 只在你有权限测试的网络、设备和应用上使用
  • 不要在公共服务器上无密码暴露 mitmproxy 端口
  • 抓包结果可能包含 Cookie、Token、手机号、地址等敏感信息
  • 分享 JSONL / HAR 前先脱敏
  • 不提供、也不讨论绕过证书绑定或突破账号安全机制的方法

常见问题

和 Fiddler / 原生 mitmproxy 有什么区别?

Fiddler 和 mitmproxy 都很好。apipeek 的区别是预设了“我只想看接口”的过滤规则和结构化输出,减少手动点选、导出、清洗的步骤。

为什么装了证书还是看不到 HTTPS 明文?

可能原因:

  • 手机没有真正信任用户证书
  • App 使用了证书绑定
  • Android 7+ 的 App 默认不信任用户 CA
  • iOS 安装证书后还需要在“关于本机 → 证书信任设置”里开启完全信任

Windows 便携版需要安装 Python 吗?

不需要。便携版已经包含官方 mitmproxy Windows 可执行文件,解压后直接运行 bat。

抓包文件在哪里?

默认在:

out/requests.jsonl

Windows 便携版也可以在 启动抓包.bat 顶部修改 APIPEEK_OUTAPIPEEK_FORMATAPIPEEK_INCLUDE 等变量。

开发与测试

pip install -e ".[dev]"
pytest

构建 Windows 便携版

.\packaging\build-portable.ps1 -Version 11.0.0

脚本会自动下载对应版本的 mitmproxy Windows 压缩包,抽取可执行文件,并生成:

dist/apipeek-portable-<version>.zip

自动发布 Release

仓库已配置 GitHub Actions(.github/workflows/release.yml)。推送 v* 标签即会 自动在 Windows runner 上构建便携版 zip 并发布到 GitHub Releases:

git tag v0.1.0
git push origin v0.1.0

也可以在仓库 Actions 页面手动触发(workflow_dispatch),输入版本号即可。

许可证

MIT

About

一个更省心的 HTTP/HTTPS API 抓包工具,自动过滤静态资源与埋点,输出 JSONL/HAR,提供 Windows 开箱即用便携版。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages