前言¶
在 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