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

查看 202|回复 13
作者:MegatronKing   
Reqable是一款跨平台的专业 HTTP 开发和调试工具,在全平台支持 HTTP1 、HTTP2 和 HTTP3(QUIC)协议,简单易用、功能强大、性能高效,助力程序开发和测试人员提高生产力!
1. 介绍
Reqable 的特点是简洁美观,基本功能免费,无需登录,安装即用。
  • 20M 左右的安装包体积。
  • 跨平台,基于 Flutter 和 C++开发。
  • 支持亮色和暗色两种主题模式。
  • 支持 11 种不同的强调色。
  • 支持 Atom One 主题代码高亮配色。


    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 提供了一键安装证书的功能。
    证书的安装入口位于顶部操作栏,点击盾牌图标打开弹窗。

    直接点击现在安装:

    点击后系统会弹出确认弹窗或者输入账户密码进行授权,按照提示操作确认即可。不出意外的话,证书会自动安装成功;如果自动安装失败,可以切换到手动安装的 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 根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入 CA 根证书安装界面,详细步骤请阅读上一节。
    一切就绪后,我们可以看到如下的界面:

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

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

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


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

    这里,我们已经完成了获取流量最基本的操作了。
    4. 开始调试
    捕获到流量之后,开始使用调试功能进行数据模拟等各种测试。Reqable 提供了非常强大的调试功能,主要有重写、断点和脚本功能,下面分别来进行介绍。
    4.1 重写
    重写是 Reqable 的核心调试功能之一,通过预设规则自动修改请求或者响应。重写功能可以通过四种方式启用或关闭:
  • 直接点击重写图标
  • 右键重写图标 -> 启用/禁用
  • 托盘 -> 重写 -> 启用/禁用
  • 快捷键 Shift + Control + K

    当重写功能开启后,快捷操作栏( 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 的核心调试功能之一,通过设定匹配规则,触发断点后实时控制和修改请求和响应。断点功能可以通过四种方式启用或关闭:
  • 直接点击断点图标
  • 右键断点图标 -> 启用/禁用
  • 托盘 -> 断点 -> 启用/禁用
  • 快捷键 Shift + Control + B

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

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

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

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

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

    4.3 脚本
    脚本是 Reqable 的核心调试功能之一,支持编写 python 脚本处理 HTTP 请求和响应。Reqable 提供了一套基于 Python 的 API ,在脚本中,我们可以对请求和响应的数据进行修改、替换或者删除,甚至还可以中断请求和响应。除了使用 Reqable 内置的 API ,用户还可以使用自己安装的各种 Python 包,例如 requests 等。
    脚本功能可以通过四种方式启用或关闭:
  • 直接点击脚本图标
  • 右键脚本图标 -> 启用/禁用
  • 托盘 -> 脚本 -> 启用/禁用
  • 快捷键 Shift + Control + P

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


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

    6. 结尾
    Reqable 还提供了非常多实用的功能,包括 API 测试、重发回放、代码生成等,最关键的是 Reqable 是可以免费使用的,下载即用,无需注册无需登录。
  • 官网: https://reqable.com
  • Github: https://github.com/reqable/reqable-app

    欢迎大家支持!

    reqable, 请求, API, 证书

  • lingling47   
    win7 无法使用 公司的电脑太垃圾了
    MegatronKing
    OP
      
    @lingling47 Reqable 是基于 Flutter 框架开发的,由于 Flutter 本身不支持 win7 ,所以没办法。工欲善其事,必先利其器,这个简单道理,但很遗憾的是很多当领导的没这个意识,哎。
    lingling47   
    @MegatronKing 谢谢哦
    ochatokori   
    在 v 站就不要带上国产这个词了
    zzNucker   
    看功能挺好的,支持一下
    skiy   
    Linux 安装后,运行不了。好像是依赖 gtk3 的?
    而且,二进制文件跑到 /usr/share/reqable/ 目录中了,这样的目录不合理吧?我看了下安装的软件,大都是在 /opt 目录下。
    zzNucker   
    @ochatokori 国产咋了?
    质量好 V 站也总会有明白人支持的
    littlesubgirl   
    flutter 开发的界面就是有点怪怪的感觉,比 ele 还怪。
    左上角“文件”二字,显示异常,4k ,250%缩放。
    整个菜单文字,显示怪怪的。英文无异常。
    oIMOo   
    建议上 brew
    您需要登录后才可以回帖 登录 | 立即注册