前言¶
在 DeepSeek Harness (DSH) 環境中,有時需要模擬特定客戶端(如 Codex Desktop、Claude Code)的行爲,或者清理 LLM SDK 自帶的指紋頭以規避風控檢測。DSH 原生未提供單次請求的 Header 鉤子,dsh-custom-header 插件通過攔截 fetch 傳輸層,直接修改出站請求的 Headers 和 Body,實現客戶端身份注入、URL 重寫及 Anthropic 請求體修補。
這是什麼¶
這是由 Asaiuta 維護的一個 MIT 協議插件。它運行在 DSH 的 fetch 傳輸層(位於 LLM SDK 之下),負責修改發往 LLM 提供商的 HTTP 請求。插件通過中間件管道處理請求,支持多種預設客戶端配置,並提供了按會話隔離的 Session ID 管理。
核心功能¶
- 客戶端身份注入:從預設配置中注入
User-Agent、Originator、X-Claude-Code-Session-Id、x-opencode-*等頭部,模擬 Codex、Claude Code 等客戶端。 - SDK 指紋剝離:自動移除
X-Stainless-*等 SDK 運行時生成的指紋頭。 - URL 重寫:支持基於路徑匹配的 URL 重寫,並允許通過
appendQuery追加查詢參數。 - Anthropic 請求體修補:針對
/v1/messages接口,修補請求體以繞過身份或計費系統的攔截,並注入metadata.user_id。 - 會話隔離:基於
GenerateOptions.sessionId和AsyncLocalStorage,實現每輪對話獨立的 Session ID 作用域。 - 403 診斷:在流式傳輸結束時檢測
status: 403,並提供診斷提示。
安裝與啓用¶
在插件目錄下執行以下命令安裝:
dsh plugin --profile web add file:$(pwd)
或者直接引用插件名(如果已發佈):
dsh plugin --profile web add dsh-custom-header
安裝完成後,可通過以下命令驗證配置是否生效:
dsh --profile web --dump-config | grep dsh-custom-header
典型用法¶
1. 配置文件¶
在 DSH 的 cordis.yml 中添加配置。以下是基本配置示例:
dsh-custom-header:
profile: auto
autoHosts:
- gateway.example.com
autoCodexProfile: codex_desktop
codexVersion: 0.147.0
claudeCliVersion: 2.1.220
opencodeVersion: 1.18.18
opencodeClient: cli
opencodeProject: global
claudeSystemMode: identity
extraHeaders: {}
urlRewrites:
/v1/messages:
appendQuery: beta=true
persistProfile: true
2. 預設 Profile 選擇¶
插件內置了多種預設配置,用於模擬不同的客戶端:
| Profile | 用途 |
|---|---|
codex_desktop |
模擬桌面端 Codex 應用,包含 codex_app/1.2026.0628 UA 和 Originator: codex_app。 |
codex_official |
模擬官方 CLI,UA 爲 codex_cli_rs/0.147.0。 |
codex_tui |
模擬交互式 TUI 界面,UA 爲 codex-tui/0.147.0。 |
codex_claude_plugin |
模擬 Claude Code 插件,包含特定 Session ID 和 Anthropic 頭部。 |
pi_agent |
模擬 Pi 編碼代理。 |
claude_code_messages |
特化配置,用於處理 Claude Messages 請求體修補。 |
opencode_zen |
模擬 opencode 客戶端,包含特定的 Session ID 格式。 |
auto |
根據匹配 autoHosts 動態選擇配置。 |
off |
禁用所有修改。 |
3. 運行時控制¶
在運行時,可以通過 JS API 切換 Profile 或查看狀態:
ctx.dshCustomHeader.setProfile('codex_desktop')
ctx.dshCustomHeader.status()
4. 設置頁面¶
在 DSH 的設置界面中,進入 Plugins -> Custom Header (請求頭修改) 標籤頁,可以手動選擇 Profile、編輯 autoHosts 白名單、調整版本字段以及切換 Claude 系統模式(identity / billing)。設置保存後無需重啓,下一條請求即可生效。
適用場景與注意¶
- 權限要求:該插件需要你管理或擁有訪問權限的服務器。它通過修改請求頭來欺騙服務器端的風控或鑑權邏輯。
- Cloudflare 阻斷:如果目標服務器使用 Cloudflare 的 TLS/Bot 邊緣防護,可能需要配置不同的 API 入口、管理員白名單或本地正向代理。
- Node Undici 層限制:
accept-language和sec-fetch-mode由 Node.js 的undici在fetch調用層之下注入,本插件無法移除這些頭部。如果服務器強制校驗這些字段,需在本地反向代理層終止請求。 - UA 優先級:UA 覆蓋是最終的,DSH 的 Attribution 層合併的 UA 無法覆蓋 fetch 層注入的 UA。
- 安全默認值:默認配置
profile: 'auto'且autoHosts爲空時,插件不會對任何請求進行修改。
短結尾¶
dsh-custom-header 提供了在 DSH fetch 層面進行請求定製的能力,適合需要模擬特定 LLM 客戶端行爲或清理 SDK 痕跡的開發場景。其核心價值在於通過中間件機制實現了靈活的 Header 注入和 Body 修補。
- GitHub 倉庫: https://github.com/Asaiuta/dsh-custom-header