# GetCat

> 以 Rust + GPUI 打造的原生跨平台 HTTP API 除錯工具

開源免費的 HTTP API 除錯工具，支援 macOS、Windows、Linux。以 Rust + GPUI 打造：GPU 繪製的原生視窗，不是 Electron；免帳號、不上傳任何東西；幾百 MB 的回應也不會卡住介面。

授權條款: Apache-2.0 · 支援平台: macOS, Windows, Linux · 安裝檔大小: 16 MB

## 章節

- [功能特色](https://getcat.io/zh-TW/#features)
- [請求建構](https://getcat.io/zh-TW/#request)
- [回應檢視](https://getcat.io/zh-TW/#response)
- [AI 範本](https://getcat.io/zh-TW/#ai)
- [工作區](https://getcat.io/zh-TW/#workspace)
- [下載](https://getcat.io/zh-TW/#download)
- [系統需求](https://getcat.io/zh-TW/#requirements)
- [常見問題](https://getcat.io/zh-TW/#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、简体中文、繁體中文、日本語 與 Français。

## 建構好請求，順手把程式碼帶走

塑造一個請求需要的東西都在，外加一鍵匯出 —— 匯出的就是 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 驗證預設關閉，為的是除錯本機自簽憑證的 API 時不必大費周章。請求照常送出，GetCat 仍會離線解析憑證，並就上面四種情況發出警告。在設定裡開啟驗證之後，有問題的憑證會直接中斷交握。

## 內建 AI API 範本 —— OpenAI 與 Anthropic 多模態請求主體寫法對照

點一下就得到一個填好 URL、認證標頭與請求主體的新 Tab。真正的價值在下面這組多模態寫法：三家 API 彼此互不相容。

### 九個範本

OpenAI Chat Completions、OpenAI Responses、Anthropic Messages，每個都有純文字、含圖片與串流三種變體。側欄另有 MCP 兩個協定世代的範本。

傳送前先替換 YOUR_API_KEY；也可以把金鑰存成變數、在這裡寫 {{API_KEY}}，再標記為敏感值，介面上就會以遮罩顯示。

### 同一個圖片請求的三種寫法

#### 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` | 應用程式設定。 |
| `variables.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 刻意不做的事

把這份清單放在這裡，是為了讓你在下載之前就知道，也免得有人拿別的工具來類比：

歷史記錄 · JavaScript 請求前指令碼與測試指令碼 · 獨立的 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.exe` |
| Windows | arm64 · 免安裝 | `GetCat-windows-arm64.exe` |
| Windows | x64 · 安裝版 | `GetCat-windows-x64.msi` |
| Windows | arm64 · 安裝版 | `GetCat-windows-arm64.msi` |
| Linux | x64 | `GetCat-linux-x64.tar.gz` |
| Linux | arm64 | `GetCat-linux-arm64.tar.gz` |

- 全球下載: `https://github.com/finch-xu/GetCat/releases/latest/download/<檔案>`
- 中國鏡像: `https://d.mirror.catonthe.top/GetCat/<檔案>`

### 安裝

- **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

macOS 11 Big Sur 以上，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、沒有指令碼 —— 變數、環境與回應斷言都有，但是在表格裡填寫，而不是寫 JavaScript。換來的是一個 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 憑證驗證？

為的是讓「除錯一個使用自簽憑證的本機 API」這件事直接可用，而這在開發時是常態。請求照常送出，同時 GetCat 仍會離線解析對端憑證，並在憑證已過期、尚未生效、主機名稱不符，或是自簽且沒有信任鏈時發出警告。在設定裡開啟驗證就恢復嚴格行為：有問題的憑證會直接中斷交握。

### 支援環境變數、測試斷言或團隊協作嗎？

變數與斷言支援，團隊協作不支援。變數分全域、分類、環境三層，請求裡寫 `{{var}}` 就會替換，也有 `{{$timestamp}}` 這類動態變數。前後置操作在傳送前設定變數，回應後把欄位擷取到變數、對狀態碼 / 回應標頭 / JSON 做斷言 —— 都在表格裡填寫，不用寫指令碼。可以匯入匯出 Postman environment，敏感變數在介面上以遮罩顯示。仍然刻意留白的是指令碼、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-TW/)
- [GitHub](https://github.com/finch-xu/GetCat): 原始碼與 issue
- [Releases](https://github.com/finch-xu/GetCat/releases): 所有版本與安裝檔
- [DeepWiki](https://deepwiki.com/finch-xu/GetCat): 自動產生的程式碼文件
