本地配置 HTTP API
可信的本机工具可以复用 App 的配置解析、编译、已安装 GeoData 和 libXray 校验,不需要另外安装 CLI。接口不导入或保存资产,不修改设置,不下载依赖,也不启动或停止 VPN。
启用与鉴权
进入高级 → Xray → 本地 API,启用并保存。默认关闭,仅桌面端提供。App 必须运行且完成服务准备;隐藏窗口不影响使用,退出 App 则接口停止,即使系统 VPN 仍在运行。
默认地址为 http://127.0.0.1:18587,端口可设置为 1024–65535。仅监听 IPv4 回环地址,不向局域网开放。Xray 的 SOCKS/metrics 自动端口会避开已保存的 API 端口,即使 API 尚未启用;不会改写用户手动配置的入站端口。
从 App 复制 Token,交给可信本机工具的受保护凭据存储。每次请求都需要 Authorization: Bearer <token>。Token 重启后保留;重置后旧值立即失效。关闭 API 保留 Token,清空 App 数据会删除它,连接配置备份不包含它。
不要把 Token 放入 AI 提示词、URL、命令行参数、代码仓库或日志。凭据应独立配置,不与让 AI 生成的配置文本混合。工具应直连界面显示的回环地址,绕过环境代理并关闭重定向。接口不支持浏览器 Origin 请求和跨域访问。Token 无法防御已经控制同一用户账户的恶意程序。
API 版本 1
| 方法与路径 | 结果 |
|---|---|
GET /api/v1/info |
API、App、内核版本,以及宿主平台和支持的配置类型 |
POST /api/v1/config/validate |
App 解析和验证投影,再调用 libXray 配置校验 |
POST /api/v1/config/compile |
生成运行配置预览,不调用内核校验或执行配置 |
POST 使用 Content-Type: application/json,请求体上限 16 MiB。配置应作为原始文本字符串提交,不要先解析再编码,否则诊断位置不再对应原文。
{
"kind": "raw",
"text": "{\n \"name\": \"Direct example\",\n \"outbounds\": [{\"protocol\": \"freedom\", \"tag\": \"direct\"}]\n}"
}这个示例没有代理凭据,使用直连,不是提供给用户的 VPN 节点。
kind |
text 的含义 |
|---|---|
outbound |
节点编辑器中的单个 outbound 对象,不是外包 outbounds 的文档 |
routing |
包含空接入槽的常规自定义路由 |
advanced-routing |
遵守独立字段边界的高级自定义 JSON |
raw |
完整 Raw JSON 配置 |
可选 name 遵守对应输入类型的命名规则,不要混淆配置名称和 outbound tag。validate 不接受 options 和额外 outbounds;路由校验使用占位出站,不验证实际选中的节点组合。
编译预览
调用 compile 时,在 kind、text 之外明确提供 options 对象:
{
"platform": "macos",
"sessionDirectory": "/explicit/preview-directory",
"metricsPort": 19001,
"socksPort": 19002,
"ipv6": true
}platform支持ios、macos、android、windows、linux,表示生成目标,不是远程运行请求。- Windows 还需要
windowsMode: "exe"或"msix";Windows/Linux 必须提供interfaceName。 routing和advanced-routing还需要根级outbounds数组,真实节点数与空接入槽一致。outbound和raw使用自身节点,不接受额外数组。- 可选
tunDnsIpv4Address、tunDnsIpv6Address、logEnabled、logFilesSupported、logLevel、dnsLog、maskAddress省略时使用编译器默认值,不继承当前连接设置。 - GeoData 路径来自当前 App 的已安装目录。生成跨平台配置不代表目标设备具有这些路径;编译不检查端口空闲或网卡存在,不创建会话目录,不写正式运行配置。
正确理解结果
同时检查 status(passed、failed、notRun)和 stage(input、compile、kernel)。HTTP 200 不等于校验通过;compile 阶段的 passed 只代表预览生成成功。
诊断包含分类码和原因;仅在可靠时附带 path、offset、line、column。偏移从 0 开始,行列从 1 开始,偏移和列按 UTF-16 code unit 计数。路径为数组,例如 ["routing", "rules", 0, "domain"]。不要从无定位的内核错误或生成的 JSON 猜测原文位置。
validationConfig 和 compiledConfig 是 JSON 文本,可能包含凭据;保存结果时应保护敏感内容。确认成功前阅读 limitations。忙碌返回 409、请求过大返回 413、服务不可用返回 503;它们都不是配置已通过。
校验构造并关闭 Core 实例,但不启动 VPN;可能产生进程级副作用,不是运行不可信配置的安全沙箱。它不下载缺失 GeoData,不检查数据库名称或数量限制,不证明实际节点组合正确,也不保证启动和联网成功。客户端超时不能取消已经进入原生层的校验,不要自动重试。