1. 介绍
Reqable 的特点是简洁美观,基本功能免费,无需登录,安装即用。
Reqable 桌面端支持 Windows/Mac/Linux 三大主流平台,具备抓包调试和 API 测试两大基本功能,可以将其看成是 Fiddler/Charles + Postman 。
Reqable 打通了 API 调试和测试之间的壁垒,例如可以从抓包数据中创建 API 进行测试,也可以在 API 测试时进行流量抓包分析。
2. 安装证书
Reqable 使用经典的中间人( MITM )技术分析 HTTPS 流量,当客户端与 Reqable 的代理服务器(下文简称中间人)进行通信时,中间人需要重签远程服务器的 SSL 证书。为了保证客户端与中间人成功进行 SSL 握手通信,需要将中间人的根证书(下文简称CA 根证书)安装到客户端本地的证书管理中心。
如果目标客户端是 PC 应用程序,CA 根证书需要安装到 PC 的证书管理中心;如果目标客户端是移动端 App 应用程序,CA 根证书则需要安装到手机的证书管理中心。如果没有流量分析的需求,可以忽略这一步。
Reqable 会为每个用户自动生成完全不同的 CA 根证书,并使用随机的证书密钥,所以不必担心此证书会被第三方利用。
2.1 桌面端安装
不同的桌面端平台(这里主要是 Windows/MacOS/Linux ),证书安装方式有所不同,为了简化安装过程,Reqable 提供了一键安装证书的功能。
证书的安装入口位于顶部操作栏,点击盾牌图标打开弹窗。
直接点击现在安装:
点击后系统会弹出确认弹窗或者输入账户密码进行授权,按照提示操作确认即可。不出意外的话,证书会自动安装成功;如果自动安装失败,可以切换到手动安装的 Tab 按照步骤手动安装。
注意,在 Linux 设备上 Chrome 和 Firefox 浏览器有内置的证书管理系统,还需要将 CA 根证书安装到浏览器的证书管理系统中,请按照 Reqable 内的提示进行操作。
CA 根证书未安装或安装失败时,盾牌图标显示为黄色;安装成功后,盾牌图标显示为绿色。
2.2 移动端安装
如果有分析移动端应用的需求,必须在移动端安装 CA 根证书。Reqable 中内置了 Android 和 iOS 证书安装的指引,请切换到Android和iOS的 Tab 按照步骤进行安装。
由于 Android 7.0 起不再信任用户证书,需要将 CA 根证书安装到系统证书目录,这要求能够 Root 设备并解锁 System 分区。
3. 分析流量
在 API 调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用 Reqable 获取流量,通俗地讲就是抓包。
首先,需要启用 Reqable 的调试功能,点击最右上角的启动按钮进入调试状态。在调试状态下,任何 HTTP 请求经过 Reqable 的 MITM 代理服务器都会显示到界面上。
为了保证流量经过 Reqable 的 MITM 代理服务器并信任 Reqable 的 CA 根证书,请检查下面两项:
如果系统代理已经设置,网络图标是绿色;如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。
如果 CA 根证书安装成功,盾牌图标是绿色;如果 CA 根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入 CA 根证书安装界面,详细步骤请阅读上一节。
一切就绪后,我们可以看到如下的界面:
打开浏览器,输入地址 https://reqable.com 并回车,这里演示使用的是 Chrome 浏览器。回到 Reqable ,调试列表中已经捕获到了该网站的全部请求数据。
我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。注意,再次双击该请求,可以关闭详情面板。
点击侧边栏的工作台图标,打开调试列表的工作面板。然后展开reqable.com此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。
点击最右上角垃圾篓图标(快捷键 Control + Shift + R )可以清空列表。
这里,我们已经完成了获取流量最基本的操作了。
4. 开始调试
捕获到流量之后,开始使用调试功能进行数据模拟等各种测试。Reqable 提供了非常强大的调试功能,主要有重写、断点和脚本功能,下面分别来进行介绍。
4.1 重写
重写是 Reqable 的核心调试功能之一,通过预设规则自动修改请求或者响应。重写功能可以通过四种方式启用或关闭:
当重写功能开启后,快捷操作栏( Quickbar )上的重写图标将变为绿色激活状态。
Reqable 的重写支持下面 5 种模式。
4.1.1 重定向
重写重定向提供了非常细粒度的重定向操作,例如一个客户端请求 A:https://hello.com/foo,可以重定向为返回请求 B:https://world.com/bar 的结果。
4.1.2 替换请求
表示整体替换请求数据,支持替换的部分包括:请求方法、请求路径、请求头和请求体。从流量列表创建重写-替换请求规则,可以自动带入原始请求数据,我们可以在其他基础上进行修改。替换的时候,也可以选择一个本地文件进行替换。
4.1.3 修改请求
相比于替换请求,修改请求提供了更加细致化的修改策略。例如删除查询参数,修改请求头中的某一项,正则替换请求体的内容,适合动态修改。
4.1.4 替换响应
基本操作同上面替换请求。
4.1.5 修改响应
基本操作同上面修改请求。
4.2 断点
断点是 Reqable 的核心调试功能之一,通过设定匹配规则,触发断点后实时控制和修改请求和响应。断点功能可以通过四种方式启用或关闭:
当断点功能开启后,快捷操作栏( Quickbar )上的断点图标将变为绿色激活状态。
接下来新建一个断点规则:
输入规则名称和匹配的 URL ,URL 支持简单的 Wildcard * 和 ? 匹配。完成后,当请求或响应发生时,便可以进入断点操作界面。
我们可以在这个页面上,修改数据然后提交。
每个断点请求(响应)有180s的时间进行操作,超时后断点会自动失效,暂停住的请求和响应会继续。
4.3 脚本
脚本是 Reqable 的核心调试功能之一,支持编写 python 脚本处理 HTTP 请求和响应。Reqable 提供了一套基于 Python 的 API ,在脚本中,我们可以对请求和响应的数据进行修改、替换或者删除,甚至还可以中断请求和响应。除了使用 Reqable 内置的 API ,用户还可以使用自己安装的各种 Python 包,例如 requests 等。
脚本功能可以通过四种方式启用或关闭:
当脚本功能开启后,快捷操作栏( Quickbar )上的脚本图标将变为绿色激活状态。
脚本使用 python3 运行,必须使用 python3 的语法。脚本提供两个函数调用入口:onRequest和onResponse,顾名思义即请求和响应。
脚本修改后会自动保存,也可以手动使用快捷键 Control + S 立即保存。
下面是脚本的功能代码示例:
def onRequest(context, request):
# 打印请求方法,例如:POST
print(request.method)
# 打印请求路径,例如:/foo
print(request.path)
# 打印请求参数列表,例如:[('foo', 'bar'), ('hello', 'world')]
print(request.queries)
# 打印请求头列表,例如:['host: reqable.com', 'content-length: 6', 'content-type: text/plain']
print(request.headers)
# 打印请求体,例如 {"foo":"bar"}
print(request.body)
# 修改请求方法
request.method = 'GET'
# 修改请求路径
request.path = '/bar'
# 修改请求参数,更多 API 请参考下文`CaptureHttpQueries`
request.queries['foo'] = 'bar'
# 直接赋值请求参数
request.queries = 'foo=bar&hello=world&abc=123'
request.queries = {
'foo': 'bar',
'hello': 'world',
'abc': '123'
}
# 删除指定请求参数
request.queries.remove('foo')
# 修改请求头,更多 API 请参考下文`CaptureHttpHeaders`
request.headers['content-type'] = 'application/json'
# 直接赋值请求头
request.headers = [
'content-type: application/json',
'foo: bar'
]
# 删除指定请求头
request.headers.remove('foo')
# 将文本设置给 Body
request.body = 'Hello World'
# 将字典设置给 Body ,会自动转成 JSON
request.body = {
'foo': 'bar',
'abc': 123
}
# 将二进制数据设置给 Body
request.body = b'\x01\x02\x03\x04'
# 将本地文件设置给 Body
request.body.file('/User/Reqable/Desktop/test.png')
# JSON 类型的 Body 转成字典
request.body.jsonify()
# 然后操作字典来修改 Body
request.body['foo'] = 'bar'
request.body['error'] = {
'code': 1000,
'message': 'Runtime Error'
}
# Done
return request
更多的脚本 API 可以参考文档: https://reqable.com/zh-CN/docs/capture/addons
5. API 测试
API 测试是 Reqable 的两大基本功能之一,帮助开发者调试接口 API 。Reqable 目前支持 HTTP1.1 、HTTP2 和 HTTP3 ( QUIC )协议,核心网络库采用的是Cronet,业内技术最领先的 HTTP 网络请求框架。
Reqable 支持将 API 请求收藏到集合中,并可以随时打开编辑。同时,Reqable 还支持导入 Postman 等格式的 API 集合,并且可以将调试列表中的 API 保存到集合。
6. 结尾
Reqable 还提供了非常多实用的功能,包括 API 测试、重发回放、代码生成等,最关键的是 Reqable 是可以免费使用的,下载即用,无需注册无需登录。
欢迎大家支持!