使用Clash-API切换节点

最近网络很差,机场节点随时可能爆炸。这在电脑重启后很致命,因为像YACD这样的DashBoard需要联网后才能使用,我又懒得搞个本地的Dashboard。我的解决方案是利用curl与Clash的RESTful API。

首先,阅读Clash的API的文档

RESTful - Proxies

GET 获取所有代理

/proxies

PUT 切换 Selector 中选中的代理

/proxies/:name

(这边的:name可以为节点名称,也可以为Selector。只要在proxies/后直接加上字符串就可以,不需要引号或者:

当前接口只支持切换 Selector 中的代理

Path Parameters Body Parameters
name name
string string
代理Selector名称(大小写敏感) 要切换的代理名字

接着,curl使用指南

curl 的用法指南

最后,使用curl切换节点

使用/proxies获取所有可用代理,然后curl发送PUT请求解决战斗。

Example
1
curl -X PUT -H "Content-Type: application/json" -d '{"name":"节点名"}' http://localhost:port/proxies/:Selector

-H 添加 HTTP 请求的标头Content-Type: application/json,根据链接2,不设置标头为application/json可能会有问题。

-d 参数用于发送 POST 请求的数据体。

最后的网址为clash的external-controller的网址端口,最后Selector为要选择的proxy-groups的名称。

实际指令类似下面这条:

1
curl -X PUT -H "Content-Type: application/json" -d '{"name":"HongKong"}' http://127.0.0.1:9090/proxies/Proxy
Reference
  1. put / proxies/:name 报错 body invalid #213
  2. rest full api 如何重新加载配置文件 #440