控制器 API 文档
Clash / Mihomo 内核暴露了一套本地 RESTful 接口(外部控制器),面板、脚本都是靠它拿数据和下指令。约 30 个接口,按功能分组列出请求方式和返回字段。
请求示例
面板/脚本发给内核的每一条请求都要带上认证头,格式统一如下:
curl -H 'Authorization: Bearer ${secret}' http://${controller-api}/configs?force=true \ -d '{"path": "", "payload": ""}' -X PUT
${secret}是配置文件里设置的secret密钥${controller-api}是配置文件里设置的external-controller监听地址?force=true是查询参数,部分接口需要携带'{"path": "", "payload": ""}'是要更新的资源数据
如果请求里要传文件路径,而路径又不在 mihomo 工作目录下,需要手动设置 SAFE_PATHS 环境变量把它加入安全路径,语法与操作系统的 PATH 变量一致(Windows 用分号分隔,其他系统用冒号分隔)。
日志
/logs获取实时日志。
- 可选参数
?level=log_level,log_level可选info/warning/error/debug - 可选参数
?format=structured,携带后输出结构化日志(含time/level/message/fields) - 标准模式每行推送一个 JSON:
type日志级别、payload日志内容 - 结构化模式:
time(HH:MM:SS)、level、message、fields(附加字段数组)
流量信息
/traffic获取实时流量,up/down 单位是字节/秒,upTotal/downTotal 单位是字节,每秒推送一次。
up当前上传速率down当前下载速率upTotal累计上传字节数downTotal累计下载字节数
内存信息
/memory获取实时内存占用(字节),每秒推送一次。
inuse当前内存使用量oslimit系统内存限制(固定为0)
版本信息
/version获取内核版本信息。
meta是否为 Meta 版本version版本号字符串
缓存
/cache/fakeip/flush清除 fakeip 缓存,返回 HTTP 204。
/cache/dns/flush清除 DNS 缓存,返回 HTTP 204。
运行配置
/configs获取当前运行配置,返回一个 JSON 对象,包含 port、socks-port、mixed-port、mode、log-level、allow-lan、ipv6、tun 等字段。
/configs重新加载基本配置,携带参数 ?force=true,返回 HTTP 204。
/configs局部更新基本配置,例如 '{"mixed-port": 7890}',返回 HTTP 204。
/configs/geo更新 GEO 数据库,携带 '{"path": "", "payload": ""}',返回 HTTP 204。
/restart重启内核,携带 '{"path": "", "payload": ""}',返回 HTTP 204。
更新
/upgrade更新内核,可选 ?channel=xxx 指定更新通道、?force=true 强制更新,返回 {"status": "ok"}。
/upgrade/ui更新面板(须先在配置里设置 external-ui),返回 {"status": "ok"}。
/upgrade/geo更新 GEO 数据库,返回 HTTP 204。
策略组
/group获取全部策略组信息,返回 proxies 数组,每项格式同 /proxies/{name}。
/group/{group_name}获取指定策略组信息,格式同 /proxies/{name}。
/group/{group_name}/delay对策略组内全部节点测速,返回新的延迟数据,并清除该自动策略组当前的 fixed 固定选择。
- 携带参数
?url=xxx&timeout=5000 - 可选
?expected=xxx,期望的 HTTP 响应状态码,支持范围写法如200/204、200-299 - 返回以节点名为键、延迟毫秒数为值的对象,如
{"节点A": 120, "节点B": 350}
代理
/proxies获取全部代理/策略组信息,返回以名称为键的 proxies 对象,每条公共字段包括:
name/type(如 Shadowsocks、VMess、DIRECT、Selector、URLTest 等)udp/uot/xudp/tfo/mptcp/smux能力标志alive当前是否存活,history延迟历史(time+delay),extra按测速 URL 分组的额外历史interface/routing-mark/provider-name/dialer-proxy- 策略组额外含:
now当前选中(LoadBalance 无此字段)、all成员列表、testUrl、hidden、icon、emptyFallback、expectedStatus(Selector 无)、fixed(仅 URLTest/Fallback)
/proxies/{name}获取指定代理/策略组信息,字段同上(普通代理只有公共字段)。
/proxies/{name}切换该策略组当前选中的节点,携带 '{"name":"日本"}',返回 HTTP 204。
/proxies/{name}清除该代理/策略组的 fixed 固定选择(Selector 类型除外),返回 HTTP 204。
/proxies/{name}/delay对指定代理测速,携带 ?url=xxx&timeout=5000(可选 ?expected=xxx),返回 {"delay": 120}。
代理集合
/providers/proxies获取全部代理集合信息,返回以集合名称为键的 providers 对象,每个集合含元信息及代理列表。
/providers/proxies/{name}获取指定代理集合信息,含配置信息及 proxies 代理列表。
/providers/proxies/{name}更新该代理集合,返回 HTTP 204。
/providers/proxies/{name}/healthcheck触发该代理集合的健康检查,返回 HTTP 204。
/providers/proxies/{name}/{proxy_name}获取集合内指定代理的信息,字段同 /proxies/{name}。
/providers/proxies/{name}/{proxy_name}/healthcheck对集合内指定代理测速,携带 ?url=xxx&timeout=5000,返回 {"delay": 120}。
规则
/rules获取全部规则,返回 rules 数组,每项包含:
index索引(从 0 开始)type规则类型payload匹配内容proxy目标代理/策略组size规则条目数(仅 GEOIP/GEOSITE 有效,其余为-1)- 可选
extra:disabled/hitCount/hitAt/missCount/missAt
/rules/disable按索引临时禁用/启用规则(重启后失效),携带 '{"0": false,"1": true}',返回 HTTP 204。
规则集合
/providers/rules获取全部规则集合信息,返回以名称为键的 providers 对象。
/providers/rules/{name}更新指定规则集合,返回 HTTP 204。
连接
/connections获取活跃连接信息,可选参数 ?interval=milliseconds(刷新间隔,默认 1000ms)。
downloadTotal/uploadTotal累计流量memory当前内存占用connections活跃连接数组:id、metadata(源/目标地址、协议、进程名等)、upload/download、start、chains/providerChains代理链路、rule/rulePayload命中的规则
/connections关闭全部连接,返回 HTTP 204。
/connections/{id}关闭指定连接,返回 HTTP 204。
域名查询
/dns/query获取指定名称和类型的 DNS 查询结果,携带 ?name=example.com&type=A。
StatusDNS 响应码Question查询问题数组TC/RD/RA/AD/CD各类 DNS 标志位- 可选
Answer/Authority/Additional:均为记录数组,每项含name/type/TTL/data
存储
/storage/{key}获取指定 key 的存储值,不存在时返回 null。
/storage/{key}写入指定 key 的值(须为合法 JSON,最大 1MB),携带 '{"foo": "bar"}',返回 HTTP 204。
/storage/{key}删除指定 key 的存储值,返回 HTTP 204。
DEBUG
/debug 系列接口需要内核启动时的日志级别设为 debug。
/debug/gc触发一次主动 GC,返回 HTTP 204。
/debug/pprof浏览器打开 http://${controller-api}/debug/pprof 查看原始 DEBUG 信息:
- allocs:每个函数调用的内存分配情况(栈上/堆上大小与次数),用来排查内存泄漏、频繁申请等问题
- heap:堆上内存使用详情,包含分配块的大小、数量、地址并按大小排序,用来定位内存占用过高的位置
安装 Graphviz 后可以看图形化报告:
go tool pprof -http=:8080 http://127.0.0.1:xxxx/debug/pprof/heap go tool pprof -http=:8080 http://127.0.0.1:xxxx/debug/pprof/allocs
浏览器访问 http://${controller-api}/debug/pprof/heap?raw=true 即可下载报告文件,遇到问题时可以把它上传到 issue 里方便排查。