Reqable是一款跨平台的专业 HTTP 开发和调试工具,在全平台支持 HTTP1 、HTTP2 和 HTTP3(QUIC)协议,简单易用、功能强大、性能高效,助力程序开发和测试人员提高生产力!
Reqable 的特点是简洁美观,基本功能免费,无需登录,安装即用。
Reqable 桌面端支持 Windows/Mac/Linux 三大主流平台,具备抓包调试和 API 测试两大基本功能,可以将其看成是 Fiddler/Charles + Postman 。
Reqable 打通了 API 调试和测试之间的壁垒,例如可以从抓包数据中创建 API 进行测试,也可以在 API 测试时进行流量抓包分析。
Reqable 使用经典的中间人( MITM )技术分析 HTTPS 流量,当客户端与 Reqable 的代理服务器(下文简称中间人
)进行通信时,中间人需要重签远程服务器的 SSL 证书。为了保证客户端与中间人成功进行 SSL 握手通信,需要将中间人的根证书(下文简称CA 根证书
)安装到客户端本地的证书管理中心。
如果目标客户端是 PC 应用程序,CA 根证书需要安装到 PC 的证书管理中心;如果目标客户端是移动端 App 应用程序,CA 根证书则需要安装到手机的证书管理中心。如果没有流量分析的需求,可以忽略这一步。
Reqable 会为每个用户自动生成完全不同的 CA 根证书,并使用随机的证书密钥,所以不必担心此证书会被第三方利用。
不同的桌面端平台(这里主要是 Windows/MacOS/Linux ),证书安装方式有所不同,为了简化安装过程,Reqable 提供了一键安装证书的功能。
证书的安装入口位于顶部操作栏,点击盾牌
图标打开弹窗。
直接点击现在安装
:
点击后系统会弹出确认弹窗或者输入账户密码进行授权,按照提示操作确认即可。不出意外的话,证书会自动安装成功;如果自动安装失败,可以切换到手动安装
的 Tab 按照步骤手动安装。
注意,在 Linux 设备上 Chrome 和 Firefox 浏览器有内置的证书管理系统,还需要将 CA 根证书安装到浏览器的证书管理系统中,请按照 Reqable 内的提示进行操作。
CA 根证书未安装或安装失败时,盾牌图标显示为黄色;安装成功后,盾牌图标显示为绿色。
如果有分析移动端应用的需求,必须在移动端安装 CA 根证书。Reqable 中内置了 Android 和 iOS 证书安装的指引,请切换到Android
和iOS
的 Tab 按照步骤进行安装。
由于 Android 7.0 起不再信任用户证书,需要将 CA 根证书安装到系统证书目录,这要求能够 Root 设备并解锁 System 分区。
在 API 调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用 Reqable 获取流量,通俗地讲就是抓包。
首先,需要启用 Reqable 的调试功能,点击最右上角的启动
按钮进入调试状态。在调试状态下,任何 HTTP 请求经过 Reqable 的 MITM 代理服务器都会显示到界面上。
为了保证流量经过 Reqable 的 MITM 代理服务器并信任 Reqable 的 CA 根证书,请检查下面两项:
如果系统代理已经设置,网络图标是绿色;如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。
如果 CA 根证书安装成功,盾牌图标是绿色;如果 CA 根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入 CA 根证书安装界面,详细步骤请阅读上一节。
一切就绪后,我们可以看到如下的界面:
打开浏览器,输入地址 https://reqable.com
并回车,这里演示使用的是 Chrome 浏览器。回到 Reqable ,调试列表中已经捕获到了该网站的全部请求数据。
我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。注意,再次双击该请求,可以关闭详情面板。
点击侧边栏的工作台
图标,打开调试列表的工作面板。然后展开reqable.com
此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。
点击最右上角垃圾篓图标(快捷键 Control + Shift + R )可以清空列表。
这里,我们已经完成了获取流量最基本的操作了。
捕获到流量之后,开始使用调试功能进行数据模拟等各种测试。Reqable 提供了非常强大的调试功能,主要有重写、断点和脚本功能,下面分别来进行介绍。
重写是 Reqable 的核心调试功能之一,通过预设规则自动修改请求或者响应。重写功能可以通过四种方式启用或关闭:
当重写功能开启后,快捷操作栏( Quickbar )上的重写图标将变为绿色激活状态。
Reqable 的重写支持下面 5 种模式。
重写重定向提供了非常细粒度的重定向操作,例如一个客户端请求 A:https://hello.com/foo
,可以重定向为返回请求 B:https://world.com/bar
的结果。
表示整体替换请求数据,支持替换的部分包括:请求方法、请求路径、请求头和请求体。从流量列表创建重写-替换请求规则,可以自动带入原始请求数据,我们可以在其他基础上进行修改。替换的时候,也可以选择一个本地文件进行替换。
相比于替换请求
,修改请求提供了更加细致化的修改策略。例如删除查询参数,修改请求头中的某一项,正则替换请求体的内容,适合动态修改。
基本操作同上面替换请求
。
基本操作同上面修改请求
。
断点是 Reqable 的核心调试功能之一,通过设定匹配规则,触发断点后实时控制和修改请求和响应。断点功能可以通过四种方式启用或关闭:
当断点功能开启后,快捷操作栏( Quickbar )上的断点图标将变为绿色激活状态。
接下来新建一个断点规则:
输入规则名称和匹配的 URL ,URL 支持简单的 Wildcard * 和 ? 匹配。完成后,当请求或响应发生时,便可以进入断点操作界面。
我们可以在这个页面上,修改数据然后提交。
每个断点请求(响应)有180s的时间进行操作,超时后断点会自动失效,暂停住的请求和响应会继续。
脚本是 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
API 测试是 Reqable 的两大基本功能之一,帮助开发者调试接口 API 。Reqable 目前支持 HTTP1.1 、HTTP2 和 HTTP3 ( QUIC )协议,核心网络库采用的是Cronet,业内技术最领先的 HTTP 网络请求框架。
Reqable 支持将 API 请求收藏到集合中,并可以随时打开编辑。同时,Reqable 还支持导入 Postman 等格式的 API 集合,并且可以将调试列表中的 API 保存到集合。
Reqable 还提供了非常多实用的功能,包括 API 测试、重发回放、代码生成等,最关键的是 Reqable 是可以免费使用的,下载即用,无需注册无需登录。
欢迎大家支持!
101
BlueMacondo 2023-08-26 12:39:09 +08:00
挺好看的。
但是好像没办法选中多行 然后复制 url 。 有没有考虑后续加这个功能 |
102
xinJang 2023-08-26 12:48:46 +08:00
反馈下问题
1.开了 v2ray 情况下无法代理(使用 fd 可以不存在此情况) 2.建议加个自动滚动按钮选项 |
103
justonelastdance 2023-08-26 12:49:58 +08:00
谁能帮忙爬一下这个网站吗? https://xcdd.lol
|
104
zero3412 2023-08-26 13:29:06 +08:00
版本 1.2.0
系统 macOS 13.4.1 启用系统代理,浏览器被阻断 |
106
TomyJan 2023-08-26 14:53:30 +08:00
这种东西不搞买断制确实难理解
|
107
iMusic 2023-08-26 15:36:34 +08:00
一直用的 Whistle 客户端版,试试这个 flutter 写的如何
|
108
sky96111 2023-08-26 17:29:11 +08:00
@skiy 你的感觉是对的 https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
附加应用软件包应该放在/opt 。 /usr/share 是放共享的数据的 |
109
freefcw 2023-08-26 21:47:26 +08:00
Reqable 不错,不过在 linux 下缩放实在是太难看了
|
110
aQuQ 2023-08-27 15:41:50 +08:00
|
111
waylife 2023-08-27 17:39:36 +08:00
相当好用,支持
|
112
viazure 2023-08-27 22:12:39 +08:00
httpCanary 经常有用,使用支持下
|
113
loszhang 2023-08-28 10:22:15 +08:00
支持支持
|
114
MegatronKing OP @BlueMacondo v1.2.1 加了,感谢反馈。
|
115
MegatronKing OP @kuanat Rest API 我已经通过接入 cronet 实现了,quic mitm 我计划用 nghttp3 实现,时间大约在移动端版本出来之后。udp 不走 web 代理,移动端 vpn 模式反而可以。
|
116
XYxe 2023-09-05 11:58:59 +08:00
关于付费模式的疑问:如果我只有 2 台 Mac ,那是不是也要买 2 份专业版才能在两台 Mac 上使用?为什么不是 1 个专业版在 3 台任意类型的设备上使用呢?
|
117
MegatronKing OP @XYxe 因为这个 79.9 价格已经很低了,相比 Fiddler/Charles/Proxyman 来讲,1/5 的价格还低。而且可以和只用 windows 的用户合买,你用 mac ,他用 windows 。另外,一个许可证也只是限制两台 Mac 同时使用,两台 mac 可以随时激活切换的,所以你也不至于两台 mac 同时使用吧。
|
118
VirtualLife 2023-09-07 16:39:58 +08:00
已经购买一年,用来取代 FD 了。
目前有个小小的疑问,将来有没有可能提供一个选项,切换是否启用动画效果。 |
119
MegatronKing OP @VirtualLife 感谢支持。动画效果是指哪部分的动画效果?
|
120
VirtualLife 2023-09-07 21:11:26 +08:00
@MegatronKing
我是 Windows 10 。 以下这几个是我今天用的时候感觉最让我分心的动画: 1 、打开一切窗口时,会先出现一个略小于窗口的白色透明区域,然后扩大的同时再出现窗口本身,暗黑模式下会感到闪烁了一下 2 、切换请求头、请求体标签的翻页效果,必须等它翻页完才能看内容 3 、鼠标 hover 右上角那一排开关时,tips 的淡出淡入效果,左右平移鼠标时 tips 会叠在一起 4 、初次点击列表某个项目时,颜色从点击处扩散,然后项目背景色才会出现,有那么一瞬间感觉看不清项目本身的内容 |
121
MegatronKing OP @VirtualLife
首先,感谢反馈和建议,关于这几个问题我解答下: 1. Flutter 官方目前不支持多窗口模式,Reqable 使用的第三方库,问题就是加载慢。看到的白色透明区域然后变大,这个不是动画,完全是加载慢导致的 bug 。这是个已知问题,目前还没有办法解决,非常抱歉。 2/3/4. 这几个其实都是 Google 的 Material Design 的设计风格,Flutter 的组件自带的效果,我研究下是否有关闭的方式。 |
122
VirtualLife 2023-09-08 17:40:33 +08:00
@MegatronKing
非常感谢您的回复。这标志性的按钮水波纹,我该想到是 Material Design 的。 平时用 Google 的网页、App ,感觉都还好。 可能使用 Reqable 时操作频率相对高一些,所以不太愿意去等组件的动画效果。 感谢您愿意关注这些细节,我相信 Reqable 会越来越好的! |
123
Tukali 2023-09-10 18:07:53 +08:00
@MegatronKing 它可以一年更新买断,需要的话就续费,不需要的话也能继续使用
|
124
MegatronKing OP @Tukali 很高兴和你讨论定价模式这个问题。我觉得一年更新买断这个机制并不友好,作为严重依赖系统原生 API 的应用,历史版本随着苹果高频率的系统版本更新会带来很多问题,你不得不为最新版本再次付费,换句话说就是你买断的版本其实用不了几年,你还需要忍受无法更新期间的各种 bug 。Reqable 虽然没有买断,但有更低的订阅价格,5 年的定价不到其它产品 1 年的定价,假设你用相同的价格购买了 5 年,这 5 年内你随时可以更新到最新版本,体验更多新功能,享受到产品体验的持续提升。你还可以随时停止付费,因为你可能新的工作不需要使用这类产品了,也可能发现更实惠更好的产品等等。Reqable 还提供了按月付费的方式,调试工具你可能在几个月内的某几天才用到,在你需要时花个几块钱买一月就行了,这不比必须付一年的价格更灵活吗?
|
125
kilvn 268 天前
免费的 api 集合太少了。刚打算从 postman 导入几个集合过来以后用 reqable ,被免费版额度限制劝退了,建议参考 postman 的免费版限制,门槛可以提高点
|
126
ywlfffghff 228 天前
@kilvn 得加钱
|
127
xiguadong 50 天前
MITM 自签的证书 不被信任 如何解 Cannot handshake client lqq.com:443 remote error: tls: unknown certificate
|