V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MegatronKing
V2EX  ›  程序员

新一代国产 API 抓包调试工具 Reqable

  •  4
     
  •   MegatronKing · 2023-08-24 16:37:14 +08:00 · 14815 次点击
    这是一个创建于 491 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Reqable是一款跨平台的专业 HTTP 开发和调试工具,在全平台支持 HTTP1 、HTTP2 和 HTTP3(QUIC)协议,简单易用、功能强大、性能高效,助力程序开发和测试人员提高生产力!

    1. 介绍

    Reqable 的特点是简洁美观,基本功能免费,无需登录,安装即用。

    • 20M 左右的安装包体积。
    • 跨平台,基于 Flutter 和 C++开发。
    • 支持亮色和暗色两种主题模式。
    • 支持 11 种不同的强调色。
    • 支持 Atom One 主题代码高亮配色。

    screenshot_zh_01.png

    Reqable 桌面端支持 Windows/Mac/Linux 三大主流平台,具备抓包调试和 API 测试两大基本功能,可以将其看成是 Fiddler/Charles + Postman 。

    Reqable 打通了 API 调试和测试之间的壁垒,例如可以从抓包数据中创建 API 进行测试,也可以在 API 测试时进行流量抓包分析。

    • 支持 HTTP/1.x, HTTP2 协议版本,HTTP3(QUIC)暂不支持。
    • 支持 HTTP/HTTPS/Socks4/Socks4a/Socks5 代理方式。
    • 支持 HTTPS ,TLSv1.1 、TLSv1.2 和 TLSv1.3 加密协议。
    • 支持基于 HTTP1 升级的 WebSocket 协议。
    • 支持 HTTP/HTTPS 二级代理(调试境外流量)。
    • 搜索筛选:提供书签、域名、快捷筛选栏和多条件等高级搜索方式。
    • 网关功能:对指定请求或响应进行屏蔽,挂起等操作。
    • 重写功能:预设规则对指定请求或响应进行重定向、替换或者修改。
    • 断点功能:对请求或响应进行实时断点操作,比如屏蔽,挂起或修改替换数据等。
    • 脚本功能:支持编写 Python 脚本处理实时请求或响应。
    • 镜像功能:对指定域名和端口配置镜像映射。
    • 测试联动:支持从调试列表创建 API 进行测试。
    • 历史记录:自动保存抓包的流量数据,方便回溯查看。
    • 重发回放:支持单个或多个请求进行回放测试。
    • 自动高亮:支持设定自定义规则对请求进行多种颜色高亮。
    • HAR 支持:自动关联 HAR 格式文件,并支持 HAR 导出和导入。

    2. 安装证书

    Reqable 使用经典的中间人( MITM )技术分析 HTTPS 流量,当客户端与 Reqable 的代理服务器(下文简称中间人)进行通信时,中间人需要重签远程服务器的 SSL 证书。为了保证客户端与中间人成功进行 SSL 握手通信,需要将中间人的根证书(下文简称CA 根证书)安装到客户端本地的证书管理中心。

    如果目标客户端是 PC 应用程序,CA 根证书需要安装到 PC 的证书管理中心;如果目标客户端是移动端 App 应用程序,CA 根证书则需要安装到手机的证书管理中心。如果没有流量分析的需求,可以忽略这一步。

    Reqable 会为每个用户自动生成完全不同的 CA 根证书,并使用随机的证书密钥,所以不必担心此证书会被第三方利用。

    2.1 桌面端安装

    不同的桌面端平台(这里主要是 Windows/MacOS/Linux ),证书安装方式有所不同,为了简化安装过程,Reqable 提供了一键安装证书的功能。

    证书的安装入口位于顶部操作栏,点击盾牌图标打开弹窗。

    installation_01.png

    直接点击现在安装

    installation_02.png

    点击后系统会弹出确认弹窗或者输入账户密码进行授权,按照提示操作确认即可。不出意外的话,证书会自动安装成功;如果自动安装失败,可以切换到手动安装的 Tab 按照步骤手动安装。

    installation_03.png

    注意,在 Linux 设备上 Chrome 和 Firefox 浏览器有内置的证书管理系统,还需要将 CA 根证书安装到浏览器的证书管理系统中,请按照 Reqable 内的提示进行操作。

    CA 根证书未安装或安装失败时,盾牌图标显示为黄色;安装成功后,盾牌图标显示为绿色。

    2.2 移动端安装

    如果有分析移动端应用的需求,必须在移动端安装 CA 根证书。Reqable 中内置了 Android 和 iOS 证书安装的指引,请切换到AndroidiOS的 Tab 按照步骤进行安装。

    installation_04.png

    由于 Android 7.0 起不再信任用户证书,需要将 CA 根证书安装到系统证书目录,这要求能够 Root 设备并解锁 System 分区。

    3. 分析流量

    在 API 调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用 Reqable 获取流量,通俗地讲就是抓包。

    首先,需要启用 Reqable 的调试功能,点击最右上角的启动按钮进入调试状态。在调试状态下,任何 HTTP 请求经过 Reqable 的 MITM 代理服务器都会显示到界面上。

    为了保证流量经过 Reqable 的 MITM 代理服务器并信任 Reqable 的 CA 根证书,请检查下面两项:

    • 系统代理状态

    如果系统代理已经设置,网络图标是绿色;如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。

    • CA 根证书状态

    如果 CA 根证书安装成功,盾牌图标是绿色;如果 CA 根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入 CA 根证书安装界面,详细步骤请阅读上一节。

    一切就绪后,我们可以看到如下的界面:

    traffic_01.png

    打开浏览器,输入地址 https://reqable.com 并回车,这里演示使用的是 Chrome 浏览器。回到 Reqable ,调试列表中已经捕获到了该网站的全部请求数据。

    traffic_02.png

    我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。注意,再次双击该请求,可以关闭详情面板。

    traffic_03.png

    点击侧边栏的工作台图标,打开调试列表的工作面板。然后展开reqable.com此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。

    traffic_04.png

    点击最右上角垃圾篓图标(快捷键 Control + Shift + R )可以清空列表。

    这里,我们已经完成了获取流量最基本的操作了。

    4. 开始调试

    捕获到流量之后,开始使用调试功能进行数据模拟等各种测试。Reqable 提供了非常强大的调试功能,主要有重写、断点和脚本功能,下面分别来进行介绍。

    4.1 重写

    重写是 Reqable 的核心调试功能之一,通过预设规则自动修改请求或者响应。重写功能可以通过四种方式启用或关闭:

    • 直接点击重写图标
    • 右键重写图标 -> 启用/禁用
    • 托盘 -> 重写 -> 启用/禁用
    • 快捷键 Shift + Control + K

    当重写功能开启后,快捷操作栏( Quickbar )上的重写图标将变为绿色激活状态。

    rewrite_01.png

    Reqable 的重写支持下面 5 种模式。

    4.1.1 重定向

    重写重定向提供了非常细粒度的重定向操作,例如一个客户端请求 A:https://hello.com/foo,可以重定向为返回请求 B:https://world.com/bar 的结果。

    rewrite_12.png

    4.1.2 替换请求

    表示整体替换请求数据,支持替换的部分包括:请求方法、请求路径、请求头和请求体。从流量列表创建重写-替换请求规则,可以自动带入原始请求数据,我们可以在其他基础上进行修改。替换的时候,也可以选择一个本地文件进行替换。

    rewrite_05.png

    4.1.3 修改请求

    相比于替换请求,修改请求提供了更加细致化的修改策略。例如删除查询参数,修改请求头中的某一项,正则替换请求体的内容,适合动态修改。

    rewrite_09.png

    4.1.4 替换响应

    基本操作同上面替换请求

    4.1.5 修改响应

    基本操作同上面修改请求

    4.2 断点

    断点是 Reqable 的核心调试功能之一,通过设定匹配规则,触发断点后实时控制和修改请求和响应。断点功能可以通过四种方式启用或关闭:

    • 直接点击断点图标
    • 右键断点图标 -> 启用/禁用
    • 托盘 -> 断点 -> 启用/禁用
    • 快捷键 Shift + Control + B

    当断点功能开启后,快捷操作栏( Quickbar )上的断点图标将变为绿色激活状态。

    breakpoint_01.png

    接下来新建一个断点规则:

    breakpoint_02.png

    输入规则名称和匹配的 URL ,URL 支持简单的 Wildcard * 和 ? 匹配。完成后,当请求或响应发生时,便可以进入断点操作界面。

    breakpoint_03.png

    我们可以在这个页面上,修改数据然后提交。

    每个断点请求(响应)有180s的时间进行操作,超时后断点会自动失效,暂停住的请求和响应会继续。

    4.3 脚本

    脚本是 Reqable 的核心调试功能之一,支持编写 python 脚本处理 HTTP 请求和响应。Reqable 提供了一套基于 Python 的 API ,在脚本中,我们可以对请求和响应的数据进行修改、替换或者删除,甚至还可以中断请求和响应。除了使用 Reqable 内置的 API ,用户还可以使用自己安装的各种 Python 包,例如 requests 等。

    脚本功能可以通过四种方式启用或关闭:

    • 直接点击脚本图标
    • 右键脚本图标 -> 启用/禁用
    • 托盘 -> 脚本 -> 启用/禁用
    • 快捷键 Shift + Control + P

    当脚本功能开启后,快捷操作栏( Quickbar )上的脚本图标将变为绿色激活状态。

    script_01.png

    脚本使用 python3 运行,必须使用 python3 的语法。脚本提供两个函数调用入口:onRequestonResponse,顾名思义即请求和响应。

    script_02.png

    脚本修改后会自动保存,也可以手动使用快捷键 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 网络请求框架。

    • 支持 HTTP/1.1, HTTP2 和 HTTP3(QUIC)协议。
    • 多个会话:支持创建多个 Tab 进行 API 测试。
    • 批量编辑:支持批量编辑请求参数、请求头、表单等。
    • 授权设置:支持 API KEY 、Basic Auth 和 Bearer Token 等授权方式。
    • 代理设置:支持自定义代理配置,系统代理和调试代理等。
    • 性能测试:可以查看请求在不同环节的耗时数据。
    • Cookie 管理:自动保存 Cookie 或在请求头中自动加入关联的 Cookie 。
    • 历史记录:自动保存发送的请求和响应数据,方便回溯查看。
    • cURL 支持:可以导入和导出 cURL 。
    • 代码生成:支持 java/python/go/javascript/kotlin 等主流网络框架代码生成。

    screenshot_zh_02.png

    Reqable 支持将 API 请求收藏到集合中,并可以随时打开编辑。同时,Reqable 还支持导入 Postman 等格式的 API 集合,并且可以将调试列表中的 API 保存到集合。

    collection_04.png

    6. 结尾

    Reqable 还提供了非常多实用的功能,包括 API 测试、重发回放、代码生成等,最关键的是 Reqable 是可以免费使用的,下载即用,无需注册无需登录。

    欢迎大家支持!

    127 条回复    2024-10-29 14:30:43 +08:00
    1  2  
    BlueMacondo
        101
    BlueMacondo  
       2023-08-26 12:39:09 +08:00
    挺好看的。
    但是好像没办法选中多行 然后复制 url 。 有没有考虑后续加这个功能
    xinJang
        102
    xinJang  
       2023-08-26 12:48:46 +08:00
    反馈下问题
    1.开了 v2ray 情况下无法代理(使用 fd 可以不存在此情况)
    2.建议加个自动滚动按钮选项
    justonelastdance
        103
    justonelastdance  
       2023-08-26 12:49:58 +08:00
    谁能帮忙爬一下这个网站吗? https://xcdd.lol
    zero3412
        104
    zero3412  
       2023-08-26 13:29:06 +08:00
    版本 1.2.0
    系统 macOS 13.4.1
    启用系统代理,浏览器被阻断
    lisxour
        105
    lisxour  
       2023-08-26 14:19:03 +08:00
    @wkong #92 我没说白嫖啊,但是楼主这种免费版这么大的限制跟摆明让你付费有区别?
    TomyJan
        106
    TomyJan  
       2023-08-26 14:53:30 +08:00
    这种东西不搞买断制确实难理解
    iMusic
        107
    iMusic  
       2023-08-26 15:36:34 +08:00
    一直用的 Whistle 客户端版,试试这个 flutter 写的如何
    sky96111
        108
    sky96111  
       2023-08-26 17:29:11 +08:00
    @skiy 你的感觉是对的 https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
    附加应用软件包应该放在/opt 。
    /usr/share 是放共享的数据的
    freefcw
        109
    freefcw  
       2023-08-26 21:47:26 +08:00
    Reqable 不错,不过在 linux 下缩放实在是太难看了
    aQuQ
        110
    aQuQ  
       2023-08-27 15:41:50 +08:00
    期待安卓版,httpcanary 是个好东西
    waylife
        111
    waylife  
       2023-08-27 17:39:36 +08:00
    相当好用,支持
    viazure
        112
    viazure  
       2023-08-27 22:12:39 +08:00
    httpCanary 经常有用,使用支持下
    loszhang
        113
    loszhang  
       2023-08-28 10:22:15 +08:00
    支持支持
    MegatronKing
        114
    MegatronKing  
    OP
       2023-08-28 20:43:47 +08:00
    @BlueMacondo v1.2.1 加了,感谢反馈。
    MegatronKing
        115
    MegatronKing  
    OP
       2023-08-28 20:49:28 +08:00
    @kuanat Rest API 我已经通过接入 cronet 实现了,quic mitm 我计划用 nghttp3 实现,时间大约在移动端版本出来之后。udp 不走 web 代理,移动端 vpn 模式反而可以。
    XYxe
        116
    XYxe  
       2023-09-05 11:58:59 +08:00
    关于付费模式的疑问:如果我只有 2 台 Mac ,那是不是也要买 2 份专业版才能在两台 Mac 上使用?为什么不是 1 个专业版在 3 台任意类型的设备上使用呢?
    MegatronKing
        117
    MegatronKing  
    OP
       2023-09-05 23:59:48 +08:00
    @XYxe 因为这个 79.9 价格已经很低了,相比 Fiddler/Charles/Proxyman 来讲,1/5 的价格还低。而且可以和只用 windows 的用户合买,你用 mac ,他用 windows 。另外,一个许可证也只是限制两台 Mac 同时使用,两台 mac 可以随时激活切换的,所以你也不至于两台 mac 同时使用吧。
    VirtualLife
        118
    VirtualLife  
       2023-09-07 16:39:58 +08:00
    已经购买一年,用来取代 FD 了。
    目前有个小小的疑问,将来有没有可能提供一个选项,切换是否启用动画效果。
    MegatronKing
        119
    MegatronKing  
    OP
       2023-09-07 19:36:22 +08:00
    @VirtualLife 感谢支持。动画效果是指哪部分的动画效果?
    VirtualLife
        120
    VirtualLife  
       2023-09-07 21:11:26 +08:00
    @MegatronKing

    我是 Windows 10 。

    以下这几个是我今天用的时候感觉最让我分心的动画:

    1 、打开一切窗口时,会先出现一个略小于窗口的白色透明区域,然后扩大的同时再出现窗口本身,暗黑模式下会感到闪烁了一下
    2 、切换请求头、请求体标签的翻页效果,必须等它翻页完才能看内容
    3 、鼠标 hover 右上角那一排开关时,tips 的淡出淡入效果,左右平移鼠标时 tips 会叠在一起
    4 、初次点击列表某个项目时,颜色从点击处扩散,然后项目背景色才会出现,有那么一瞬间感觉看不清项目本身的内容
    MegatronKing
        121
    MegatronKing  
    OP
       2023-09-08 16:12:01 +08:00
    @VirtualLife

    首先,感谢反馈和建议,关于这几个问题我解答下:
    1. Flutter 官方目前不支持多窗口模式,Reqable 使用的第三方库,问题就是加载慢。看到的白色透明区域然后变大,这个不是动画,完全是加载慢导致的 bug 。这是个已知问题,目前还没有办法解决,非常抱歉。
    2/3/4. 这几个其实都是 Google 的 Material Design 的设计风格,Flutter 的组件自带的效果,我研究下是否有关闭的方式。
    VirtualLife
        122
    VirtualLife  
       2023-09-08 17:40:33 +08:00
    @MegatronKing

    非常感谢您的回复。这标志性的按钮水波纹,我该想到是 Material Design 的。
    平时用 Google 的网页、App ,感觉都还好。
    可能使用 Reqable 时操作频率相对高一些,所以不太愿意去等组件的动画效果。
    感谢您愿意关注这些细节,我相信 Reqable 会越来越好的!
    Tukali
        123
    Tukali  
       2023-09-10 18:07:53 +08:00
    @MegatronKing 它可以一年更新买断,需要的话就续费,不需要的话也能继续使用
    MegatronKing
        124
    MegatronKing  
    OP
       2023-09-11 11:36:17 +08:00
    @Tukali 很高兴和你讨论定价模式这个问题。我觉得一年更新买断这个机制并不友好,作为严重依赖系统原生 API 的应用,历史版本随着苹果高频率的系统版本更新会带来很多问题,你不得不为最新版本再次付费,换句话说就是你买断的版本其实用不了几年,你还需要忍受无法更新期间的各种 bug 。Reqable 虽然没有买断,但有更低的订阅价格,5 年的定价不到其它产品 1 年的定价,假设你用相同的价格购买了 5 年,这 5 年内你随时可以更新到最新版本,体验更多新功能,享受到产品体验的持续提升。你还可以随时停止付费,因为你可能新的工作不需要使用这类产品了,也可能发现更实惠更好的产品等等。Reqable 还提供了按月付费的方式,调试工具你可能在几个月内的某几天才用到,在你需要时花个几块钱买一月就行了,这不比必须付一年的价格更灵活吗?
    kilvn
        125
    kilvn  
       277 天前
    免费的 api 集合太少了。刚打算从 postman 导入几个集合过来以后用 reqable ,被免费版额度限制劝退了,建议参考 postman 的免费版限制,门槛可以提高点
    ywlfffghff
        126
    ywlfffghff  
       238 天前
    @kilvn 得加钱
    xiguadong
        127
    xiguadong  
       59 天前
    MITM 自签的证书 不被信任 如何解 Cannot handshake client lqq.com:443 remote error: tls: unknown certificate
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.