From efaa5f31b6b8b5038b37b0683172f98e2dc02113 Mon Sep 17 00:00:00 2001 From: NyaMisty Date: Wed, 24 May 2023 03:53:13 +0800 Subject: [PATCH] Support proxy in request and session cmds (#754) --- src/flaresolverr_service.py | 4 ++-- src/sessions.py | 4 ++-- src/utils.py | 7 ++++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/flaresolverr_service.py b/src/flaresolverr_service.py index dd5306f..890d8ad 100644 --- a/src/flaresolverr_service.py +++ b/src/flaresolverr_service.py @@ -179,7 +179,7 @@ def _cmd_request_post(req: V1RequestBase) -> V1ResponseBase: def _cmd_sessions_create(req: V1RequestBase) -> V1ResponseBase: logging.debug("Creating new session...") - session, fresh = SESSIONS_STORAGE.create(session_id=req.session) + session, fresh = SESSIONS_STORAGE.create(session_id=req.session, proxy=req.proxy) session_id = session.session_id if not fresh: @@ -236,7 +236,7 @@ def _resolve_challenge(req: V1RequestBase, method: str) -> ChallengeResolutionT: driver = session.driver else: - driver = utils.get_webdriver() + driver = utils.get_webdriver(req.proxy) logging.debug('New instance of webdriver has been created to perform the request') return func_timeout(timeout, _evil_logic, (req, driver, method)) except FunctionTimedOut: diff --git a/src/sessions.py b/src/sessions.py index 4a2f2e5..d80607a 100644 --- a/src/sessions.py +++ b/src/sessions.py @@ -25,7 +25,7 @@ class SessionsStorage: def __init__(self): self.sessions = {} - def create(self, session_id: Optional[str] = None, force_new: Optional[bool] = False) -> Tuple[Session, bool]: + def create(self, session_id: Optional[str] = None, proxyconf: Optional[dict] = None, force_new: Optional[bool] = False) -> Tuple[Session, bool]: """create creates new instance of WebDriver if necessary, assign defined (or newly generated) session_id to the instance and returns the session object. If a new session has been created @@ -44,7 +44,7 @@ class SessionsStorage: if self.exists(session_id): return self.sessions[session_id], False - driver = utils.get_webdriver() + driver = utils.get_webdriver(proxyconf=proxyconf) created_at = datetime.now() session = Session(session_id, driver, created_at) diff --git a/src/utils.py b/src/utils.py index 8f42b5f..31c1fdd 100644 --- a/src/utils.py +++ b/src/utils.py @@ -36,7 +36,7 @@ def get_flaresolverr_version() -> str: return FLARESOLVERR_VERSION -def get_webdriver() -> WebDriver: +def get_webdriver(proxyconf: dict=None) -> WebDriver: global PATCHED_DRIVER_PATH logging.debug('Launching web browser...') @@ -55,6 +55,11 @@ def get_webdriver() -> WebDriver: options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-ssl-errors') + if proxyconf: + proxy_url = proxyconf['url'] + logging.debug("Using webdriver proxy: %s", proxy_url) + options.add_argument('--proxy-server=%s' % proxy_url) + # note: headless mode is detected (options.headless = True) # we launch the browser in head-full mode with the window hidden windows_headless = False