PythonLuvr/api-discover
GitHub: PythonLuvr/api-discover
通过捕获真实浏览器会话的网络请求,自动生成强类型 API 客户端,并提前给出认证可行性判定。
Stars: 1 | Forks: 0
api-discover
指向任意网站。获取能像调用 API 一样与它交互的代码。
许多实用的网络工具并没有公开的 API。以编程方式使用它们的唯一方法要么是手动点击操作,要么是从零开始编写爬虫。`api-discover` 取代了这两种方式。它会监视你的一个真实浏览器会话,捕获该网站发出的每一个网络请求,并编写一个你可以从自己的代码中调用的强类型客户端。 它还会预先告诉你该网站是否使用了机器人防护(CAPTCHA、请求签名、通过 WebSocket 传递结果),这些防护会阻止你的代码在真实浏览器之外运行。最后一部分是其独特之处。大多数工具只是转储捕获的数据,然后让你在凌晨 2 点才发现你想要的 endpoint 是受限的。 对于开发者:生成 OpenAPI 3.1 规范、一个零依赖的 JavaScript 客户端、一份带有 `curl` 示例的可视化报告,以及一份 15 条规则的认证可行性分析(Turnstile、CSRF 系列、SSO 链等)。 ## 快速开始 ``` git clone https://github.com/PythonLuvr/api-discover.git cd api-discover ./install.sh # or .\install.ps1 on Windows # 启动一个附加 CDP 的浏览器(每个会话一次): api-discover doctor # prints the exact command for your platform # 捕获一个 flow: api-discover capture https://httpbin.org/anything -o ./out/demo -d 30 # 读取判定结果: cat ./out/demo/auth-analysis.md ``` ## 你将获得什么 ``` out/run-1/ ├── api-spec/ │ ├── openapi.yaml # OpenAPI 3.1 │ ├── client.mjs # zero-dep fetch SDK │ ├── report.html # visual report │ └── report.md # same content, markdown ├── auth-analysis.md # replay-feasibility verdict ├── auth-analysis.json # structured for tooling ├── cdp/network/ # raw CDP captures (jsonl) └── samples/ # one captured request per operation ``` ## 认证分析器 捕获完成后,分析器会扫描每一个请求、响应、cookie 和 WebSocket 帧,并标记出阻止纯 HTTP 重放的模式。每项发现都包含严重程度、证据、解释以及建议的后续路径。 示例输出: ``` # Auth 分析:protected.example.com **Endpoints captured:** 14 **Origins observed:** https://protected.example.com, https://api.example.com ## 判定结果:BLOCKED > HTTP-only replay NOT FEASIBLE without browser context. **Recommended execution model:** `in_browser` **Summary:** 2 BLOCKING, 1 WARN, 1 OK, 0 INFO. ## 发现 ### [BLOCKING] 检测到 Cloudflare Turnstile Cloudflare Turnstile generates a per-request token via client-side JS. The token cannot be reproduced outside a real browser session. **Evidence:** endpoint: POST /api/generate header: cf-turnstile-response value: 0.aX...kdm **Recommendation:** Run the replay client inside the live browser tab via cdp('Runtime.evaluate'), or drive the UI directly and skip pure HTTP replay. --- ### [BLOCKING] 结果通过 WebSocket 传输,而非 HTTP response The endpoint returns a deferred status (queued/processing/pending) and the final result arrives over a WebSocket frame matching the job id. ... ``` ### 检测到的模式 (v0.1) | 类别 | 规则 | |---|---| | 机器人挑战 | Cloudflare Turnstile, hCaptcha, Google reCAPTCHA | | 结果交付 | WebSocket 交付的结果, SSO 重定向链 | | 请求签名 | HMAC / x-signature / AWS 风格 | | CSRF 防护 | Laravel, Django, 通用的双重提交 | | 认证 token | 静态 Bearer, 轮换 Bearer (refresh-token 流程) | | 租户范围 | x-workspace-id, x-org-id, x-tenant-id 等 | | 会话认证 | 纯 session-cookie | | 噪声过滤 | 分布式追踪 headers, CORS 预检 | 15 条规则,全部针对合成捕获进行了单元测试。请参阅 [`lib/auth-analyzer/rules/`](lib/auth-analyzer/rules/) 获取源码。 ## 工作原理 四个部分,融合为一个命令: 1. **Browser harness**(Python 编写,通过 `uv`)附加到你登录的真实 Chrome/Edge/Brave 会话中。在目标标签页上显式启用 CDP Network domain。 2. **Capture pipeline** 在你驱动操作流程时,将 `Network.requestWillBeSent`、`Network.responseReceived`、`Network.getResponseBody` 和 `Network.webSocketFrameReceived` 排空并转为 JSONL 格式。 3. **Spec generator** 按 `(method, path-template)` 对请求进行聚类,通过对比样本间的 query 和 body 差异来推断参数,并生成 OpenAPI 3.1 规范 + 一个零依赖的 `client.mjs`。 4. **Auth analyzer**(本仓库的创新贡献)将捕获的 headers、cookie 和响应 body 与精选的规则集进行模式匹配,用于检测 CSRF、机器人挑战、WebSocket 交付的结果、租户范围和 SSO 重定向。 ## 两种捕获模式 **Canned** 模式,用于可通过 URL 直接访问的页面: ``` api-discover capture https://target.example/page -o ./out/run -d 90 ``` **Inline** 模式,用于你已经手动配置好的标签页(多步表单、模态窗口状态、重新导航会破坏的齿轮图标设置): ``` # 1) 查找 tab id browser-harness -c "import json; print(json.dumps(list_tabs()))" # 2) 不重新导航进行捕获 api-discover inline --tab-id标签:API生成, BeEF, CMS安全, JavaScript, MITM代理, OpenAPI, 威胁情报, 开发者工具, 爬虫, 网络抓包, 自定义脚本, 逆向工具