diff --git a/core/controllers/ConnectionController.py b/core/controllers/ConnectionController.py index 2eec43a..92c657c 100644 --- a/core/controllers/ConnectionController.py +++ b/core/controllers/ConnectionController.py @@ -15,11 +15,12 @@ from pathlib import Path from subprocess import CalledProcessError from typing import Union, Optional, Any import os +import random import re -import requests import shutil import socket import subprocess +import sys import tempfile import time @@ -430,14 +431,11 @@ class ConnectionController: return task_output @staticmethod - def __test_connection(port_number: Optional[int] = None, timeout: float = 10.0): + def __test_connection(port_number: Optional[int] = None, timeout: float = 4.0): - proxies = None request_urls = [Constants.PING_URL] - timeout = float(timeout) - - if port_number is not None: - proxies = ConnectionController.get_proxies(port_number) + command_name = os.path.basename(sys.executable) + proxies = None if os.environ.get('PING_URL') is None: @@ -447,14 +445,28 @@ class ConnectionController: 'https://hc3.hydraveil.net' ]) + random.shuffle(request_urls) + + if port_number is not None: + proxies = ConnectionController.get_proxies(port_number) + for request_url in request_urls: + command = [ + sys.executable, '-u', '-c', 'import sys; from requests import get\n' + f'response = get(\'{request_url}\', timeout={timeout}, proxies={proxies})\n' + 'if response.status_code == 200:\n' + ' print((response.text or \'\')[:15])\n' + 'else:\n' + f' raise subprocess.CalledProcessError(1, {command_name})\n' + ] + try: - requests.get(request_url, timeout=timeout, proxies=proxies) + _response = subprocess.check_output(command, text=True, timeout=timeout) return None - except requests.exceptions.RequestException: + except (subprocess.CalledProcessError, subprocess.TimeoutExpired): pass raise ConnectionError('The connection could not be established.')