From 70f966c331e4968fc504ffea88b58ae18d668ecf Mon Sep 17 00:00:00 2001 From: hjq <770690987@qq.com> Date: Fri, 26 Jun 2026 17:47:38 +0800 Subject: [PATCH] =?UTF-8?q?BOM=E5=8F=91=E6=96=99=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser_login/login.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/browser_login/login.py b/browser_login/login.py index 7ca57a9..c783c2b 100644 --- a/browser_login/login.py +++ b/browser_login/login.py @@ -50,7 +50,7 @@ def patch_drission_ws_handshake() -> None: return def resilient_create_connection(address, **kwargs): - # 终极暴力破解法:移除所有可能导致 Chrome 安全校验失败的头 + log("INFO", f"[DEBUG-WS] websocket-client trying to connect to: {address}") base_kwargs = dict(kwargs) # 强制禁用代理,防止请求被容器内的网络规则重定向 @@ -59,29 +59,17 @@ def patch_drission_ws_handshake() -> None: base_kwargs["http_proxy_host"] = None base_kwargs["http_proxy_port"] = None - # 提取目标端口,用于构造合法的 Host 头 - try: - port = address.split(":")[2].split("/")[0] - except IndexError: - port = "9222" - - # Chrome 149 增强了 DevTools 的安全校验。 - # Host header 必须是 IP 地址或 localhost,且必须包含端口号! - # 注意:websocket-client 会自动生成 Host 头,如果这里手动加上会导致发送重复的 Host 头,从而被 Chrome 500 拒绝。 candidate_kwargs = [ - # 策略1:最标准的 localhost 组合,不手动加 Host 避免重复 + # 策略1:最干净的连接,什么都不加 (根据测试脚本,测试 1 成功) { **base_kwargs, - "suppress_origin": False, - "header": ["Origin: http://127.0.0.1"] }, - # 策略2:最原始、最干净的连接方式(类似 curl) + # 策略2:DrissionPage 默认的抑制 Origin (根据测试脚本,测试 2 成功) { **base_kwargs, - "suppress_origin": True, - "header": [] + "suppress_origin": True }, - # 策略3:伪装成 localhost + # 策略3:加上 localhost Origin { **base_kwargs, "suppress_origin": False,