wnlen/clash-for-linux

能不能通过命令行的方式切换节点呢?

Opened this issue · 2 comments

因为远端服务器只有22端口可用,其余端口没有开放。所以想问一下有没有可以直接通过命令行切换节点的方法呢?

可以获取所有的节点组,Bearer不能省略

curl -X GET "http://127.0.0.1:9090/proxies -H "Authorization: Bearer <your_secrt>"

我这里的节点组是🚀 节点选择

如果有特殊符号,需要转换

echo -n "🚀 节点选择" | xxd -plain | sed 's/(..)/%\1/g'
%f0%9f%9a%80%20%e8%8a%82%e7%82%b9%e9%80%89%e6%8b%a9

获取特定节点组的信息,now是当前使用的节点

curl -X GET "http://127.0.0.1:9090/proxies/%f0%9f%9a%80%20%e8%8a%82%e7%82%b9%e9%80%89%e6%8b%a9"
-H "Authorization: Bearer 你的秘钥"

使用 PUT 请求切换节点

curl -X PUT "http://127.0.0.1:9090/proxies/%F0%9F%9A%80%20%E8%8A%82%E7%82%B9%E9%80%89%E6%8B%A9" -H "Authorization: Bearer <your_secret>" -d '{"name":"Node2"}'

可以参考一下这个链接:https://github.com/Elegycloud/clash-for-linux-backup/issues/40#issuecomment-2136643937,简单来说,可以通过运行如下命令(把 api_urlSecret 修改为自己的):

# ====== 开启代理 ======
cat>>~/.bashrc<<EOF

# 开启系统代理
function proxy_on() {
	export http_proxy=http://127.0.0.1:7880
	export https_proxy=http://127.0.0.1:7880
	export all_proxy=socks5://127.0.0.1:7880
	export no_proxy=127.0.0.1,localhost
	export HTTP_PROXY=http://127.0.0.1:7880
	export HTTPS_PROXY=http://127.0.0.1:7880
	export ALL_PROXY=socks5://127.0.0.1:7880
	export NO_PROXY=127.0.0.1,localhost
	echo -e "\033[32m[√] 已开启代理\033[0m"
}

# 关闭系统代理
function proxy_off(){
	unset http_proxy
	unset https_proxy
	unset all_proxy
	unset no_proxy
	unset HTTP_PROXY
	unset HTTPS_PROXY
	unset ALL_PROXY
	unset NO_PROXY
	echo -e "\033[31m[×] 已关闭代理\033[0m"
}

proxy_on

api_url="http://localhost:9090"
Secret=""

# 获取Clash代理节点列表
get_proxy_list() {
    # 使用您的命令获取代理节点列表
    # ============= 修改此处 =============
    proxies=\$(curl -s -X GET -H "Content-Type: application/json" -H "Authorization: Bearer \${Secret}" \$api_url/proxies | jq -c '.proxies.GLOBAL.all')
}

# 选择代理节点
select_proxy() {
    local mode=\$1
    if [ -z \$mode ]; then
    mode="Proxy"
    fi
    get_proxy_list
    echo "========== 代理节点列表 =========="
    i=1
    # ============= 修改此处 =============
    echo "\$proxies" | jq -r '.[]' | while IFS= read -r proxy; do
        echo "\$i. \$proxy"
        i=\$((i+1))
    done
    echo "==================================="
    read -p "请选择代理节点(输入编号):" proxy_index
    proxy=\$(echo "\$proxies" | jq -r ".[\$((proxy_index-1))]")
    # ============= 修改结束 =============
    if [[ -n \$proxy ]]; then
        # 更新Clash的代理节点设置
        curl -X PUT -s "\$api_url/proxies/\$mode" -H "Content-Type: application/json" -H "Authorization: Bearer \${Secret}" --data "{\"name\":\"\$proxy\"}" > /dev/null

        echo "代理节点已更新为:\$proxy"
    else
        echo "无效的选择!"
    fi
}
EOF

source ~/.bashrc

此后,只需要键入命令 select_proxy 就可以选择代理。