使用 Proxyman Breakpoint 拦截并修改 iOS 设备的请求与响应
本文简要演示我如何使用 Proxyman 的 Breakpoint 工具修改这些 API 调用,以便调试。
在软件开发中,断点是指一个刻意设置的停止或暂停位置,你可以在这里检查、编辑 API 请求或响应,甚至决定是拦截还是放行。
1. 何时使用 Breakpoint
简单来说:
- 为请求启用 Breakpoint:Proxyman 会在请求发送到你的服务器之前将其暂停。
- 为响应启用 Breakpoint:会在响应到达你的 App 之前将其暂停。
因此,你可以修改这些请求和响应,来测试 UI 错误或某些后端功能(包括安全漏洞)。本文只举两个简单的例子,来看看 Breakpoint 是如何工作的:
- 示例 1:修改用户的搜索关键词,观察 App 的表现(修改请求)
- 示例 2:修改响应中的用户名和头像,看看 UI 能否处理较长的文本(修改响应)
2. 在远程设备上安装 Proxyman 证书
开始之前,请先在我的 iOS 设备上安装 Proxyman 证书,以便查看 HTTPS 内容
来自我的远程设备的请求
为了更加专注,我使用 Pin 功能,将测试场景限定为两个端点 api.unsplash.com/me 和 api.unsplash.com/search。
使用 Pin 隔离端点
3. 使用端点定义匹配规则
现在来定义 Breakpoint 如何捕获发出的请求或传入的响应。这些条件可以通过两种方式设置:
方式一:菜单栏
从菜单栏选择 Tools -> Breakpoint -> Rules

随后会弹出 Breakpoint 规则窗口,你可以在这里定义所有匹配条件。要添加新规则,请点击窗口左下角的 “+” 按钮
弹出的新窗口,用于定义 Breakpoint 的匹配规则
在第一个场景中,输入端点 “api.unsplash.com/search”,并选择 “Request”(因为我们只想修改搜索关键词)

点击 “Add” 按钮后,从此时起,所有发往该端点的请求都会被 Breakpoint 拦截

方式二:右键菜单
另一种定义匹配规则的方式是选中 URL(端点),然后右键点击 -> Tools -> Breakpoint
右键点击 URL -> Tools -> Breakpoint
由于 Proxyman 会自动将所选端点用作条件,你会看到端点 “api.unsplash.com/me” 已自动填入。
接下来,为第二个场景选择 “Response”
端点已自动填入。你可以选择匹配 Request 或 Response
点击 “Done” 后,可以看到新规则已添加到 Breakpoint 规则窗口中

设置完成后,就可以修改请求和响应,观察 App 的表现了
4. 使用 Breakpoint 修改请求
首先,运行 Unsplash 应用。然后在搜索框中搜索关键词 “eat clean”,从而触发 Breakpoint 所针对的端点。
API 调用一被捕获,Breakpoints 窗口就会弹出,方便你轻松编辑查询内容。

现在,我们可以把搜索关键词从 “eat clean” 改为 “mountain” ……
…… 于是,App 不再显示原始请求(左)对应的 “eat clean” 图片,而是渲染出 “mountain” 图片(右),这就是我们对请求所做的修改 :)

结果如下:
使用 Breakpoint 修改请求后,App 渲染出 “mountain” 图片(上)
5. 使用 Breakpoint 修改响应
现在我们想修改用户名和头像,看看 App 如何处理。只需重新打开 Unsplash 应用,调用端点 “api.unsplash.com/me”。
API 响应被捕获后,你可以像编辑请求一样编辑响应的内容。
修改前的原始内容
我们把用户名改成一个更长的名字,同时也更换头像。
修改后的新内容
点击 “Execute” 后,就能看到修改后的个人资料页面显示新的用户名和头像(上),而不再是原来的内容(下) :)
修改响应后,App 渲染出新的个人资料页(右)
6. 接下来做什么?
借助 Breakpoint,你可以修改 API 请求或响应的任何部分,但请注意,当 App 收到的格式不是它所预期的正确格式时,可能会出现异常或崩溃。
你知道吗? 如果你经常测试同一种修改,可以使用 Breakpoint 模板保存要应用的值。请为每条规则设置范围较窄的 Host 和路径,避免无关流量也被暂停。测试结束后请关闭该规则;否则,后台请求可能会一直停在断点处,让 App 看起来像是卡住了。
欢迎大胆尝试这个工具,提升你的开发效率。
祝调试愉快 :)
Proxyman 是一款高性能的 macOS 应用,可帮助开发者抓取并检查来自 iOS 设备、iOS 模拟器和 Android 设备上应用及域名的 HTTP/HTTPS 请求。
下载地址:https://proxyman.com
