From d223a449c375c93d2de16fab7dca57d09722a174 Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Fri, 10 Jul 2026 09:11:31 +0000 Subject: [PATCH] Fix DataImpulse Playwright auth: use separate fields not URL-embedded URL-embedded proxy credentials are dropped by Chromium when request interception (context.route) is active. Both providers now use separate username/password fields; DataImpulse incurs a 14s 407 round-trip on context rotation but this only happens every 40 requests. Co-Authored-By: Claude Sonnet 4.6 --- backend/services/proxy.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/backend/services/proxy.py b/backend/services/proxy.py index 336a71b..0874341 100644 --- a/backend/services/proxy.py +++ b/backend/services/proxy.py @@ -109,12 +109,9 @@ def playwright_proxy(cfg: dict, session_id: Optional[str] = None) -> Optional[di return None user, pwd = _build_auth(cfg, session_id) server = f"http://{cfg['host']}:{cfg['port']}" - if _provider(cfg) == 'iproyal': - return {'server': server, 'username': user, 'password': pwd} - from urllib.parse import quote - return { - 'server': f"http://{quote(user, safe='')}:{quote(pwd, safe='')}@{cfg['host']}:{cfg['port']}", - } + # Both providers use separate fields — URL-embedded credentials stop being + # forwarded by Chromium when request interception (context.route) is active. + return {'server': server, 'username': user, 'password': pwd} def httpx_proxy(cfg: dict, session_id: Optional[str] = None):