V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MegatronKing
V2EX  ›  程序员

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

  •  4
     
  •   MegatronKing · 258 天前 · 12014 次点击
    这是一个创建于 258 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 是可以免费使用的,下载即用,无需注册无需登录。

    欢迎大家支持!

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

    我是 Windows 10 。

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

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

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

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