# GetCat

> 用 Rust + GPUI 打造的原生跨平台 HTTP 接口调试工具

开源免费的 HTTP 接口调试工具，支持 macOS、Windows、Linux。用 Rust + GPUI 打造：GPU 渲染的原生窗口，不是 Electron；无需账号、不上传任何东西；几百 MB 的响应也不会卡住界面。

许可证: Apache-2.0 · 支持平台: macOS, Windows, Linux · 安装包体积: 16 MB

## 章节

- [功能特性](https://getcat.io/zh/#features)
- [请求构造](https://getcat.io/zh/#request)
- [响应查看](https://getcat.io/zh/#response)
- [AI 模板](https://getcat.io/zh/#ai)
- [工作区](https://getcat.io/zh/#workspace)
- [下载](https://getcat.io/zh/#download)
- [系统要求](https://getcat.io/zh/#requirements)
- [常见问题](https://getcat.io/zh/#faq)

## 克制，但该有的都有

下面写的都是 GetCat 现在就能做到的事，没有把路线图当功能列。

### 原生且轻快

GPU 渲染的原生窗口，不是 Electron / Tauri / WebView；macOS、Linux、Windows 三平台同一套界面，安装包约 16 MB。

### 大响应不卡

流式接收、实时进度、随时取消。主线程永远不做 O(n) 的工作，几百 MB 的 JSON 也不会把窗口拖住。

### 完整的请求构造

七种方法，Path / Query / Headers 三张参数表都带描述列，Body 从 raw JSON 一直到定长流式的文件上传。

### 数据属于你

不存历史、不存响应、不上传任何东西。已保存请求与设置都是美化过的 JSON 文件，可手工编辑、可用 Git 管理。

### 随手即存

每个 Tab 的草稿自动落盘、重启恢复。Tab 顺序、分栏方向、主题偏好也都记住。

### 跟随系统

主题与语言跟随系统，也可固定。自绘标题栏让三平台外观一致。所有控件都有可访问名称，屏幕阅读器可用。

应用界面提供 English 与简体中文。

## 构造完请求，顺手把代码带走

塑造一个请求需要的东西都在，外加一键导出 —— 导出的就是 GetCat 真正发出去的那个请求。

### 七种方法

`GET` · `POST` · `PUT` · `PATCH` · `DELETE` · `HEAD` · `OPTIONS`

URL 里任何位置写 `{name}`，它就会自动出现在 Path 参数表里。

### Body 与参数表

| 项 | 说明 |
| --- | --- |
| `无 Body` | 用于 GET、HEAD、OPTIONS。 |
| `raw JSON / Text / XML` | 基于 tree-sitter 的语法高亮，带一键格式化。 |
| `x-www-form-urlencoded` | 键值对，编码交给它。 |
| `form-data` | 文本字段与文件字段逐行切换。文件定长流式上传，内容不进内存。 |
| `binary` | 整个文件作为 Body，同样是流式的。 |
| Path 参数 | 由 URL 里的 `{name}` 占位符自动生成。 |
| Query | 拼到 URL 上，每行可单独启用或停用。 |
| Headers | 另有一组全局默认请求头，可以逐条关掉。 |

### 生成代码

cURL、cURL（Windows）、Python requests，一键复制。生成器复用的就是发送请求那套拼装逻辑，所以你复制走的代码，等于 GetCat 会发出去的请求。

#### cURL

```bash
curl -X POST 'https://api.anthropic.com/v1/messages' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'anthropic-version: 2023-06-01' \
  -H 'Content-Type: application/json' \
  -d '{"model":"claude-opus-5","max_tokens":1024,"messages":[{"role":"user","content":"Hello"}]}'
```

#### cURL (Windows)

```bash
curl -X POST "https://api.anthropic.com/v1/messages" ^
  -H "x-api-key: YOUR_API_KEY" ^
  -H "anthropic-version: 2023-06-01" ^
  -H "Content-Type: application/json" ^
  -d "{\"model\":\"claude-opus-5\",\"max_tokens\":1024}"
```

#### Python (requests)

```python
import requests

url = "https://api.anthropic.com/v1/messages"

payload = "{\"model\":\"claude-opus-5\",\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}"
headers = {
    "x-api-key": "YOUR_API_KEY",
    "anthropic-version": "2023-06-01",
    "Content-Type": "application/json"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
```

它刻意不生成 TLS、重定向、超时这些参数：那些是 GetCat 的设置，不属于请求本身。

## 再大的响应也不卡窗口

响应怎么展示取决于它有多大 —— 主线程永远不会被要求做 O(n) 的工作。

### 按体积分三档

| 档位 | 条件 | 如何展示 |
| --- | --- | --- |
| 高亮编辑器 | ≤ 5 MB 且 ≤ 200,000 行 | 完整语法高亮、行号、折叠、响应内搜索。 |
| 按行虚拟化 | ≤ 64 MB | 纯文本逐行渲染，只对屏幕上看得见的部分做布局。 |
| 落盘预览 | > 64 MB | 写入临时文件，只预览前 1 MiB 并给出摘要，可一键保存或用系统程序打开。 |

**接收过程中** — 实时显示已接收字节与总大小，约每 33 ms 刷新一次，任何时候都能取消。

### 证书体检

Body 与 Headers 旁边还有一个「证书」页签：GetCat 会离线解析对端的叶子证书，把看到的东西列出来。

主体 · 颁发者 · 生效时间 · 到期时间 · 备用名称 (SAN) · 序列号 · 签名算法 · SHA-256 指纹

**它会就四件事告警**

- 已过期
- 尚未生效 —— 检查系统时钟
- 主机名与证书不符
- 自签名，无信任链

TLS 校验默认关闭，为的是调本地自签名接口时不用折腾。请求照常发出，而 GetCat 仍然会离线解析证书并就上面四种情况告警。在设置里打开校验之后，坏证书会直接中断握手。

## 内置 AI 接口模板 —— OpenAI 与 Anthropic 多模态请求体写法对照

点一下就得到一个填好 URL、认证头与请求体的新 Tab。真正的价值在下面这组多模态写法上：三家接口两两不兼容。

### 六个模板

OpenAI Chat Completions、OpenAI Responses、Anthropic Messages，每个都有纯文本与含图片两个变体。

发送前先替换 YOUR_API_KEY —— GetCat 没有变量与环境系统。

### 同一个图片请求的三种写法

#### OpenAI · Chat Completions

`POST https://api.openai.com/v1/chat/completions`

```json
{
  "model": "gpt-5.6",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What is in this image?" },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://example.com/cat.jpg",
            "detail": "auto"
          }
        }
      ]
    }
  ],
  "max_completion_tokens": 1024
}
```

图片块叫 image_url，而且 image_url 是个对象，里面有 url 与 detail。token 上限字段是 max_completion_tokens，不是 max_tokens。

#### OpenAI · Responses

`POST https://api.openai.com/v1/responses`

```json
{
  "model": "gpt-5.6",
  "input": [
    {
      "role": "user",
      "content": [
        { "type": "input_text", "text": "What is in this image?" },
        {
          "type": "input_image",
          "image_url": "https://example.com/cat.jpg"
        }
      ]
    }
  ],
  "max_output_tokens": 1024
}
```

Responses 把内容块改名成 input_text 与 input_image，这里的 image_url 直接是字符串而不是对象。上限字段是 max_output_tokens。

#### Anthropic · Messages

`POST https://api.anthropic.com/v1/messages`

```json
{
  "model": "claude-opus-5",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image",
          "source": {
            "type": "url",
            "url": "https://example.com/cat.jpg"
          }
        },
        { "type": "text", "text": "What is in this image?" }
      ]
    }
  ]
}
```

Anthropic 用 image 加一个 source 对象。max_tokens 是必填的，而且按官方建议，图片块要排在文字块之前。

## 你的工作区，就是几个文件

没有数据库、没有云、没有账号。GetCat 记住的每一样东西都是一个能打开、能改、能提交的 JSON 文件。

### 它会写什么

| 项 | 说明 |
| --- | --- |
| `workspace.json` | Tab 顺序、侧栏状态、分栏方向、主题偏好。 |
| `requests/<ulid>.json` | 一个已保存请求一个文件。 |
| `drafts/<tab-id>.json` | 一个 Tab 一个草稿，重启后恢复。 |
| `settings.json` | 应用设置。 |

### 存在哪里

| 平台 | 目录 |
| --- | --- |
| macOS | `~/Library/Application Support/GetCat/` |
| Linux | `$XDG_DATA_HOME/getcat/` |
| Windows | `%APPDATA%\GetCat\data\` |

写入是原子的 —— 先写临时文件再替换，崩溃不会留下半个文件。解析失败的文件会被改名为 `.corrupt-<时间>` 并跳过。`Authorization` 这类 Header 以明文保存，与 Postman、Insomnia 的本地库一致，Unix 上文件权限 0600。

### 快捷键

| 操作 | macOS | Windows / Linux |
| --- | --- | --- |
| 发送 | `⌘ Enter` | `Ctrl Enter` |
| 新建 Tab | `⌘ T` | `Ctrl T` |
| 关闭 Tab | `⌘ W` | `Ctrl W` |
| 折叠侧栏 | `⌘ B` | `Ctrl B` |
| 保存请求 | `⌘ S` | `Ctrl S` |
| 响应内搜索 | `⌘ F` | `Ctrl F` |
| 设置 | `⌘ ,` | `Ctrl ,` |

### GetCat 刻意不做的事

把这份清单放在这里，是为了让你在下载之前就知道，也免得有人拿别的工具去类推：

历史记录 · 环境变量与变量替换 · 脚本与测试断言 · 独立的 Auth 面板 · Cookie 管理 · 文件夹树 · GraphQL、WebSocket、gRPC · 团队同步与云端账号

## 下载

所有版本都在 GitHub Releases 上。这里的链接永远指向最新版。

| 平台 | 项 | 文件 |
| --- | --- | --- |
| macOS | Apple Silicon | `GetCat-macos-arm64.dmg` |
| macOS | Intel | `GetCat-macos-x64.dmg` |
| Windows | x64 · 安装版 | `GetCat-windows-x64.msi` |
| Windows | x64 · 免安装 | `GetCat-windows-x64.exe` |
| Linux | x64 | `GetCat-linux-x64.tar.gz` |

### 安装

- **macOS** — 已签名公证，拖进「应用程序」即可。
- **Windows** — MSI 装到当前用户目录，不需要管理员权限，开始菜单里可以启动。免安装 exe 放哪都能跑，不写注册表。
- **Linux** — 解压后把可执行文件放进 PATH。再加一个 .desktop 就有启动器了 —— 命令见下。

#### Linux 安装

```bash
tar -xzf GetCat-linux-x64.tar.gz
install -Dm755 getcat ~/.local/bin/getcat
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/getcat.desktop <<EOF
[Desktop Entry]
Type=Application
Name=GetCat
Exec=$HOME/.local/bin/getcat
Categories=Development;
EOF
```

Windows 的两个包尚未代码签名，首次运行 SmartScreen 会拦一下：点「更多信息」→「仍要运行」。

### 更新

GetCat 在启动 5 秒后向 GitHub Releases 查询一次，绝不自动下载任何东西。你选择更新时，安装包会先用 SHA-256 与 minisign 签名双重校验，通过之后才安装。

## 系统要求

GetCat 用 GPU 画界面，所以图形栈比 CPU 更要紧。

### macOS

Apple Silicon 或 Intel 均可。dmg 已签名公证。

### Windows

Windows 10 1803（2018 年 4 月更新）及以上，或 Windows 11。界面走 Direct3D 11，feature level 10.1 起 —— 2010 年前后的显卡就够，不要求 DirectX 12。

### Linux

2022 年后的主流桌面发行版：Ubuntu 22.04+、Debian 12+、Fedora 36+、Linux Mint 21+、openSUSE Leap 15.6+，以及 Arch 这类滚动版。下限是 glibc 2.35，所以 Ubuntu 20.04、Debian 11 和 RHEL 9 系跑不了。

### Linux：黑屏就是 Vulkan 的问题

界面走 Vulkan。如果窗口是黑的，先用 `vulkaninfo --summary` 确认驱动，然后按显卡装对应的包：

| 显卡 | 软件包 |
| --- | --- |
| Mesa | `mesa-vulkan-drivers` |
| Intel | `vulkan-intel` |
| AMD | `vulkan-radeon` |
| NVIDIA | `nvidia-driver` |

`vulkaninfo --summary` — nouveau 没有 Vulkan 支持 —— NVIDIA 显卡需要专有驱动。在虚拟机里会退回 lavapipe 软件渲染，能用但慢。

## 常见问题

### GetCat 和 Postman 有什么区别？

GetCat 是一个克制的子集。没有账号、没有云同步、没有 collection、没有环境变量、没有脚本。换来的是一个 16 MB 的原生应用：秒开、每个字节都留在你机器上、面对超大响应也不会卡死。如果你需要团队协作或测试套件，Postman 和 Insomnia 仍然是更合适的工具。

### 为什么不用 Electron 或 Tauri？

GetCat 是用 Rust 写的，基于 GPUI —— Zed 编辑器用的那套 UI 框架。窗口由 GPU 直接绘制而不是交给浏览器引擎，这既是安装包能压到 16 MB 的原因，也是几百 MB 数据流进来时响应区还能滚动的原因。网络在 Tokio runtime 上跑，结果通过 channel 回到 UI 线程，主线程永远不做 O(n) 的工作。

### 我的请求和 API Key 存在哪里？会上传吗？

不会上传 —— 没有遥测、没有账号、没有同步。已保存请求、草稿和设置都是平台数据目录里美化过的 JSON 文件，你可以手工编辑，也可以放进 Git。`Authorization` 这类 Header 值以明文保存，与 Postman、Insomnia 的本地库做法一致，Unix 上文件权限是 0600。

### 为什么默认关闭 TLS 证书校验？

为的是让「调一个自签名证书的本地接口」这件事直接可用，而这在开发时是常态。请求照常发出，同时 GetCat 仍会离线解析对端证书，并在证书已过期、尚未生效、主机名不符、或自签名无信任链时告警。在设置里打开校验就恢复严格行为：坏证书直接中断握手。

### 支持环境变量、测试断言或团队协作吗？

不支持，当前这条线上也没有计划。GetCat 没有变量替换、没有请求前后的脚本、没有断言运行器、没有 Cookie 管理、没有文件夹树、没有共享工作区。重复请求这个场景由模板覆盖；其余都是为了让应用保持小而可预期，刻意留白的。

### Linux 上窗口是黑的，怎么办？

界面走 Vulkan，黑屏几乎总是意味着缺 Vulkan 驱动。先跑 `vulkaninfo --summary` 确认，然后按显卡装 mesa-vulkan-drivers、vulkan-intel 或 vulkan-radeon。NVIDIA 显卡需要专有驱动 —— nouveau 没有 Vulkan 支持。在虚拟机里会退回 lavapipe 软件渲染。

### 支持 GraphQL / WebSocket / gRPC 吗？

不支持。GetCat 只说 HTTP。你当然可以把 GraphQL 查询作为 JSON Body POST 出去，但没有 schema 内省、没有订阅支持，也没有针对这些协议的界面。

### 多少钱？什么许可证？

免费且开源，Apache-2.0。没有付费档位、没有账号、没有任何需要注册的东西。源码、issue 和每一个安装包都在 GitHub 上。

## 相关链接

- [官网](https://getcat.io/zh/)
- [GitHub](https://github.com/finch-xu/GetCat): 源代码与 issue
- [Releases](https://github.com/finch-xu/GetCat/releases): 全部版本与安装包
- [DeepWiki](https://deepwiki.com/finch-xu/GetCat): 自动生成的代码文档
