fix some
This commit is contained in:
+29
-28
@@ -21,16 +21,9 @@ from services.socks5_to_http_proxy import Socks5ProxyPool
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
_current_proxy_ip: Optional[str] = None
|
||||
|
||||
|
||||
def _get_real_ip() -> Optional[str]:
|
||||
return _current_proxy_ip
|
||||
|
||||
|
||||
def _set_real_ip(ip: Optional[str]) -> None:
|
||||
global _current_proxy_ip
|
||||
_current_proxy_ip = ip
|
||||
import threading
|
||||
threading.current_thread()._proxy_ip = ip
|
||||
|
||||
|
||||
def _patch_camoufox():
|
||||
@@ -63,7 +56,9 @@ def _patch_camoufox():
|
||||
_orig_ip = _ci.public_ip
|
||||
|
||||
def _patched_ip(proxy_string: str = None) -> str:
|
||||
ip = _get_real_ip()
|
||||
# Вызывается из thread pool — используем thread-local атрибут
|
||||
import threading
|
||||
ip = getattr(threading.current_thread(), "_proxy_ip", None)
|
||||
if ip:
|
||||
logger.debug(f"public_ip() intercepted → returning {ip}")
|
||||
return ip
|
||||
@@ -140,24 +135,30 @@ class BrowserService:
|
||||
|
||||
proxy_locale = None
|
||||
|
||||
if proxy and proxy.proxy_type in [ProxyType.SOCKS5, ProxyType.SOCKS4]:
|
||||
proxy_config = await self.socks5_pool.get_proxy_config(proxy)
|
||||
use_socks5 = True
|
||||
real_ip = proxy.id.split("://")[-1].split(":")[0]
|
||||
_set_real_ip(real_ip)
|
||||
proxy_locale = _locale_for_ip(real_ip)
|
||||
has_auth = bool(proxy.login and proxy.password)
|
||||
logger.info(f"Using SOCKS5 tunnel for: {proxy.id} auth={'yes' if has_auth else 'NO'} locale={proxy_locale}")
|
||||
elif proxy:
|
||||
proxy_config = proxy.proxy_config
|
||||
real_ip = proxy.id.split("://")[-1].split(":")[0]
|
||||
_set_real_ip(real_ip)
|
||||
proxy_locale = _locale_for_ip(real_ip)
|
||||
logger.info(f"Using HTTP proxy: {proxy.id} locale={proxy_locale}")
|
||||
else:
|
||||
proxy_config = None
|
||||
_set_real_ip(None)
|
||||
logger.info("Direct connection")
|
||||
try:
|
||||
if proxy and proxy.proxy_type in [ProxyType.SOCKS5, ProxyType.SOCKS4]:
|
||||
proxy_config = await self.socks5_pool.get_proxy_config(proxy)
|
||||
use_socks5 = True
|
||||
real_ip = proxy.id.split("://")[-1].split(":")[0]
|
||||
_set_real_ip(real_ip)
|
||||
proxy_locale = _locale_for_ip(real_ip)
|
||||
has_auth = bool(proxy.login and proxy.password)
|
||||
logger.info(f"Using SOCKS5 tunnel for: {proxy.id} auth={'yes' if has_auth else 'NO'} locale={proxy_locale}")
|
||||
elif proxy:
|
||||
proxy_config = proxy.proxy_config
|
||||
real_ip = proxy.id.split("://")[-1].split(":")[0]
|
||||
_set_real_ip(real_ip)
|
||||
proxy_locale = _locale_for_ip(real_ip)
|
||||
logger.info(f"Using HTTP proxy: {proxy.id} locale={proxy_locale}")
|
||||
else:
|
||||
proxy_config = None
|
||||
_set_real_ip(None)
|
||||
logger.info("Direct connection")
|
||||
except asyncio.CancelledError:
|
||||
# Гарантируем освобождение прокси даже при отмене задачи
|
||||
if proxy:
|
||||
await self.proxy_manager.release_proxy(proxy, success=False)
|
||||
raise
|
||||
|
||||
if proxy_config:
|
||||
camoufox_kwargs = dict(
|
||||
|
||||
Reference in New Issue
Block a user