From be23f46252d023af9662ee72aee2e0f18ea54f07 Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Wed, 3 Jun 2026 00:08:21 +0000 Subject: [PATCH] =?UTF-8?q?fix(google):=20=E5=90=B8=E6=94=B6=20PR=20#82=20?= =?UTF-8?q?=E7=A4=BE=E5=8C=BA=E8=A1=A5=E4=B8=81=EF=BC=8C=E9=9A=94=E7=A6=BB?= =?UTF-8?q?=E5=85=BB=E6=8A=A4=E7=8A=B6=E6=80=81=E6=9C=BA=E4=B8=8E=E6=8E=A2?= =?UTF-8?q?=E6=B5=8B=E5=99=A8=EF=BC=8C=E4=BD=BF=E7=94=A8=E7=8E=B0=E4=BB=A3?= =?UTF-8?q?=E5=B9=B2=E5=87=80=E7=9A=84=20UA=20=E9=87=8D=E9=93=B8=20YouTube?= =?UTF-8?q?=20=E9=9B=B7=E8=BE=BE=E6=89=AB=E6=8F=8F=EF=BC=8C=E6=A0=B9?= =?UTF-8?q?=E9=99=A4=E6=9E=81=E7=AB=AF=E7=BD=91=E7=BB=9C=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E9=99=8D=E7=BA=A7=E6=8E=A2=E6=B5=8B=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/mod_google.sh | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/core/mod_google.sh b/core/mod_google.sh index f84d13c2..1986370c 100755 --- a/core/mod_google.sh +++ b/core/mod_google.sh @@ -358,30 +358,34 @@ else esac fi +# ========================================================== +# [v4.2.3 修复 - PR #82 剥离探测身份] +# 抛弃模拟人类漫游时使用的混杂老旧 UA 及污染 Cookie, +# 强制使用绝对干净且现代的 Windows Chrome UA 发起探针裸请求, +# 确保边缘服务器必定下发完整的 SPA 框架页面,防止 INNERTUBE 提取报错。 +# ========================================================== +PROBE_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" + +extract_yt_gl() { + grep -Eo '"(contentRegion|countryCode|INNERTUBE_CONTEXT_GL|GL)":"[A-Za-z]{2}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z' +} + # 核心 2: YouTube Premium 区域锁嗅探 YT_PR_GL="" -# [修复] 必须带上本轮循环的专属 UA (-A "$SESSION_UA"),防止被 Google CDN 丢进无状态爬虫兜底页 -# [v4.1.2] 追加持久化 Cookie -YT_PR_HTML=$(curl "${CURL_BIND_ARGS[@]}" "$DYNAMIC_IP_PREF" -m 10 -s -L -b "$COOKIE_FILE" -c "$COOKIE_FILE" -A "$SESSION_UA" "https://www.youtube.com/premium") +YT_PR_HTML=$(curl "${CURL_BIND_ARGS[@]}" "$DYNAMIC_IP_PREF" -m 12 -s -L -A "$PROBE_UA" "https://www.youtube.com/premium") if [[ "$YT_PR_HTML" == *"www.google.cn"* ]]; then YT_PR_GL="CN" else - YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"contentRegion":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') - [ -z "$YT_PR_GL" ] && YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"countryCode":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') - [ -z "$YT_PR_GL" ] && YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"INNERTUBE_CONTEXT_GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') + YT_PR_GL=$(printf '%s' "$YT_PR_HTML" | extract_yt_gl) fi # 核心 3: YouTube Music 区域锁嗅探 YT_MU_GL="" -# [修复] 同样加持 UA 装甲,强行唤出完整版前端框架 -# [v4.1.2] 追加持久化 Cookie -YT_MU_HTML=$(curl "${CURL_BIND_ARGS[@]}" "$DYNAMIC_IP_PREF" -m 10 -s -L -b "$COOKIE_FILE" -c "$COOKIE_FILE" -A "$SESSION_UA" "https://music.youtube.com/") +YT_MU_HTML=$(curl "${CURL_BIND_ARGS[@]}" "$DYNAMIC_IP_PREF" -m 12 -s -L -A "$PROBE_UA" "https://music.youtube.com/") if [[ "$YT_MU_HTML" == *"www.google.cn"* ]]; then YT_MU_GL="CN" else - YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"INNERTUBE_CONTEXT_GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') - [ -z "$YT_MU_GL" ] && YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"countryCode":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') - [ -z "$YT_MU_GL" ] && YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z') + YT_MU_GL=$(printf '%s' "$YT_MU_HTML" | extract_yt_gl) fi # [坐标规整] 兼容横杠分割体系,并修正英区缩写