使用 Breakpoint 工具修改 GraphQL 请求
本文简要演示如何使用 Breakpoint 工具拦截 GraphQL 的请求与响应,并修改 GraphQL 请求的请求头和请求体。
GraphQL 的问题
如果你的 App 使用 GraphQL 与后端服务器通信,那么所有 GraphQL 请求的 URL 都是相同的,例如 https://<your_server>/graphql
因此,除非读取请求体中的 Query Name,否则很难分辨每个 GraphQL 请求的作用。
下面的截图展示了 Proxyman 抓取 www.producthunt.com 的 App 流量时的情况。

👉 小贴士: 添加 Query Name 列,即可在主表格视图(Main Table View)中显示 Query Name。
对 GraphQL 请求使用 Breakpoint
由于 GraphQL 的 URL 都相同,Breakpoint 可能无法判断应该为哪个 GraphQL 请求设置断点。
要为 GraphQL 请求设置 Breakpoint,你可以选择以下任一方法:
1. 手动启用 GraphQL QueryName
创建新的 Breakpoint 规则时,点击 Wildcard 下拉菜单 -> Advanced -> GraphQL Query Name 即可。

2. 自动添加 GraphQL Query
如果是 GraphQL 请求,Proxyman 会自动添加 GraphQL Query Name。操作很简单:
- 在主表格视图中,右键点击 GraphQL 请求
- Tools -> Breakpoint
- GraphQL Query Name 会自动填入。

结果
Breakpoint 对 GraphQL 请求的表现符合预期。它允许我们修改请求/响应数据,包括请求头、URL、状态码或请求体。

GraphQL 与其他调试工具
所有调试工具,包括 Map Local、Breakpoint、Scripting 以及 Block/Allow List,都支持 GraphQL QueryName。
请在客户端代码中为操作命名,因为匿名查询无法被清晰地匹配。值得测试的响应场景包括:只含一个可空字段的普通 data 结果、顶层的 errors 数组,以及同时包含 data 和 errors 的部分响应。请将 Breakpoint 规则限定为单个操作,以免轮询或后台的 GraphQL 调用也被一并暂停。
希望这篇短文能帮你保持条理清晰。祝编码愉快!👨🚀
Proxyman 是一款高性能的 macOS 应用,可用于抓取和检查来自 iOS 设备、iOS 模拟器和 Android 设备上的应用及域名的 HTTP(s) 流量。
前往 https://proxyman.com/ 获取。
