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 
                    
                    MzM2ODkx      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      2024-03-25 14:29:07 +08:00 
                    
                    免费的 api 集合太少了。刚打算从 postman 导入几个集合过来以后用 reqable ,被免费版额度限制劝退了,建议参考 postman 的免费版限制,门槛可以提高点 
                 | 
            
     126 
                    
                    ywlfffghff      2024-05-03 23:03:27 +08:00 
                    
                    @kilvn 得加钱 
                 | 
            
     127 
                    
                    xiguadong      2024-10-29 14:30:43 +08:00 
                    
                    MITM  自签的证书 不被信任 如何解 Cannot handshake client lqq.com:443 remote error: tls: unknown certificate 
                 |