Quellcode durchsuchen

添加多个代理地址

黄中银 vor 3 Monaten
Ursprung
Commit
41b513debe
1 geänderte Dateien mit 76 neuen und 21 gelöschten Zeilen
  1. 76 21
      mixapi/china/common.sh

+ 76 - 21
mixapi/china/common.sh

@@ -10,26 +10,59 @@ DEFAULT_VERSION="v1.2"
 
 # 国内使用 GitHub 代理加速
 # 支持通过环境变量 GITHUB_PROXY 覆盖默认代理
-GITHUB_PROXY="${GITHUB_PROXY:-https://ghfast.top}"
-GITHUB_API_URL="${GITHUB_PROXY}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
-GITHUB_DOWNLOAD_BASE="${GITHUB_PROXY}/https://github.com/aiprodcoder/MIXAPI/releases/download"
+# 备用代理列表(按优先级排序)
+GITHUB_PROXY_LIST="${GITHUB_PROXY:-https://mirror.ghproxy.com https://gh.ddlc.top https://ghfast.top https://github.moeyy.xyz}"
 
-# 获取最新版本号
+# 测试代理是否可用
+test_proxy() {
+    local proxy=$1
+    local test_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
+    wget -qO- --timeout=10 "$test_url" >/dev/null 2>&1
+    return $?
+}
+
+# 获取可用的代理
+get_working_proxy() {
+    for proxy in $GITHUB_PROXY_LIST; do
+        echo "测试代理: $proxy" >&2
+        if test_proxy "$proxy"; then
+            echo "代理可用: $proxy" >&2
+            echo "$proxy"
+            return 0
+        fi
+        echo "代理不可用: $proxy" >&2
+    done
+    echo ""
+    return 1
+}
+
+# 获取最新版本号(带重试机制)
 get_latest_version() {
-    wget -qO- "$GITHUB_API_URL" | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p'
+    local proxy
+    for proxy in $GITHUB_PROXY_LIST; do
+        local api_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
+        local version=$(wget -qO- --timeout=15 "$api_url" 2>/dev/null | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p')
+        if [ -n "$version" ]; then
+            # 保存可用的代理供后续使用
+            WORKING_PROXY="$proxy"
+            echo "$version"
+            return 0
+        fi
+    done
+    echo ""
+    return 1
 }
 
-# 获取下载URL
-get_download_url() {
-    local version=$1
+# 获取架构对应的文件名后缀
+get_arch_suffix() {
     local arch="$(uname -m)"
     
     case "$arch" in
         'x86_64')
-            echo "${GITHUB_DOWNLOAD_BASE}/${version}/mixapi-${version}-linux-amd64"
+            echo "linux-amd64"
             ;;
         'aarch64')
-            echo "${GITHUB_DOWNLOAD_BASE}/${version}/mixapi-${version}-linux-arm64"
+            echo "linux-arm64"
             ;;
         *)
             echo ""
@@ -37,28 +70,50 @@ get_download_url() {
     esac
 }
 
-# 下载指定版本
+# 下载指定版本(带多代理重试机制)
 # 参数: $1=版本号, $2=目标文件路径
 download_version() {
     local version=$1
     local target=$2
-    local url=$(get_download_url "$version")
+    local arch_suffix=$(get_arch_suffix)
     
-    if [ -z "$url" ]; then
+    if [ -z "$arch_suffix" ]; then
         echo "不支持的架构: $(uname -m)"
         return 1
     fi
     
-    echo "下载地址: ${url}"
-    wget -qO "$target" "$url"
+    local filename="mixapi-${version}-${arch_suffix}"
+    local github_path="https://github.com/aiprodcoder/MIXAPI/releases/download/${version}/${filename}"
     
-    if [ $? -eq 0 ] && [ -s "$target" ]; then
-        chmod +x "$target"
-        return 0
-    else
-        rm -f "$target"
-        return 1
+    # 如果之前已经找到可用代理,优先使用
+    if [ -n "$WORKING_PROXY" ]; then
+        local url="${WORKING_PROXY}/${github_path}"
+        echo "下载地址: ${url}"
+        wget -qO "$target" --timeout=60 "$url" 2>/dev/null
+        if [ $? -eq 0 ] && [ -s "$target" ]; then
+            chmod +x "$target"
+            return 0
+        fi
     fi
+    
+    # 遍历所有代理尝试下载
+    for proxy in $GITHUB_PROXY_LIST; do
+        local url="${proxy}/${github_path}"
+        echo "尝试下载: ${url}"
+        wget -qO "$target" --timeout=60 "$url" 2>/dev/null
+        
+        if [ $? -eq 0 ] && [ -s "$target" ]; then
+            chmod +x "$target"
+            WORKING_PROXY="$proxy"
+            echo "下载成功 (代理: $proxy)"
+            return 0
+        fi
+        echo "下载失败,尝试下一个代理..."
+        rm -f "$target"
+    done
+    
+    echo "所有代理均下载失败"
+    return 1
 }
 
 # 获取当前版本