diff --git a/skyvern/webeye/browser_factory.py b/skyvern/webeye/browser_factory.py index a102000e9e..7e530b80b7 100644 --- a/skyvern/webeye/browser_factory.py +++ b/skyvern/webeye/browser_factory.py @@ -38,6 +38,8 @@ from skyvern.schemas.runs import ProxyLocation, get_tzinfo_from_proxy from skyvern.webeye.utils.page import ScreenshotMode, SkyvernFrame +PROXY_PATTERN = re.compile(r"^(http|https|socks5):\/\/([^:@]+(:[^@]*)?@)?[^\s:\/]+(:\d+)?$") + LOG = structlog.get_logger() @@ -361,12 +363,14 @@ def setup_proxy() -> dict | None: def _is_valid_proxy_url(url: str) -> bool: - PROXY_PATTERN = re.compile(r"^(http|https|socks5):\/\/([^:@]+(:[^@]*)?@)?[^\s:\/]+(:\d+)?$") try: + # Only parse if the regex matches (cheaper than urlparse in most cases) + if not PROXY_PATTERN.match(url): + return False parsed = urlparse(url) if not parsed.scheme or not parsed.netloc: return False - return bool(PROXY_PATTERN.match(url)) + return True except Exception: return False