首页 > Windows > API抓包调试工具API抓包调试工具Reqable

API抓包调试工具API抓包调试工具Reqable

Windows 2023-09-19

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

本站下载:Reqable

1. 介绍

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

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

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

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

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

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