fix ip
This commit is contained in:
+16
-13
@@ -20,18 +20,22 @@ from services.socks5_to_http_proxy import Socks5ProxyPool
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def _get_proxy_locale_by_ip(ip: str) -> str:
|
def _get_proxy_geo(ip: str) -> dict:
|
||||||
"""Возвращает locale без script-тега для реального IP прокси (ru-Cyrl-RU → ru-RU)."""
|
"""Возвращает geoip-данные для реального IP прокси в виде kwargs для AsyncCamoufox."""
|
||||||
try:
|
try:
|
||||||
from camoufox.utils import get_geolocation
|
from camoufox.utils import get_geolocation
|
||||||
geo = get_geolocation(ip)
|
geo = get_geolocation(ip)
|
||||||
lang = geo.locale.language
|
lang = geo.locale.language
|
||||||
region = geo.locale.region
|
region = geo.locale.region
|
||||||
if lang and region:
|
locale = f"{lang}-{region}" if lang and region else "en-US"
|
||||||
return f"{lang}-{region}"
|
result = {"locale": locale}
|
||||||
|
if geo.timezone:
|
||||||
|
result["timezone"] = geo.timezone
|
||||||
|
if geo.longitude is not None and geo.latitude is not None:
|
||||||
|
result["geolocation"] = {"longitude": geo.longitude, "latitude": geo.latitude}
|
||||||
|
return result
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
return {"locale": "en-US"}
|
||||||
return "en-US"
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -94,19 +98,18 @@ class BrowserService:
|
|||||||
logger.info("Direct connection")
|
logger.info("Direct connection")
|
||||||
|
|
||||||
if proxy_config:
|
if proxy_config:
|
||||||
# Для SOCKS5 camoufox видит 127.0.0.1 вместо реального IP —
|
# Camoufox при SOCKS5 видит 127.0.0.1 вместо реального IP прокси —
|
||||||
# делаем geoip lookup сами по реальному IP и передаём locale явно
|
# geoip lookup делаем сами и передаём timezone/locale/geolocation явно,
|
||||||
locale = _get_proxy_locale_by_ip(real_proxy_ip) if real_proxy_ip else None
|
# это полный эквивалент geoip=True но без внутреннего constraint'а camoufox
|
||||||
|
geo_kwargs = _get_proxy_geo(real_proxy_ip) if real_proxy_ip else {"locale": "en-US"}
|
||||||
kwargs = dict(
|
kwargs = dict(
|
||||||
headless=True,
|
headless=True,
|
||||||
geoip=True,
|
geoip=True,
|
||||||
humanize=True,
|
humanize=True,
|
||||||
exclude_addons=[DefaultAddons.UBO],
|
exclude_addons=[DefaultAddons.UBO],
|
||||||
proxy=proxy_config,
|
proxy=proxy_config,
|
||||||
|
**geo_kwargs,
|
||||||
)
|
)
|
||||||
if locale:
|
|
||||||
kwargs["locale"] = locale
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
async with AsyncCamoufox(**kwargs) as browser:
|
async with AsyncCamoufox(**kwargs) as browser:
|
||||||
result = await self._browse_page(
|
result = await self._browse_page(
|
||||||
@@ -115,9 +118,9 @@ class BrowserService:
|
|||||||
reading_time
|
reading_time
|
||||||
)
|
)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# Финальный fallback — locale en-US гарантированно есть в базе
|
|
||||||
logger.warning("geoip fingerprint failed, retrying with en-US locale")
|
logger.warning("geoip fingerprint failed, retrying with en-US locale")
|
||||||
kwargs["locale"] = "en-US"
|
kwargs["locale"] = "en-US"
|
||||||
|
kwargs.pop("geolocation", None)
|
||||||
async with AsyncCamoufox(**kwargs) as browser:
|
async with AsyncCamoufox(**kwargs) as browser:
|
||||||
result = await self._browse_page(
|
result = await self._browse_page(
|
||||||
browser, url,
|
browser, url,
|
||||||
|
|||||||
+1
-1
@@ -136,7 +136,7 @@ async def simple_test():
|
|||||||
|
|
||||||
# Выполняем посещение
|
# Выполняем посещение
|
||||||
print(" 🔄 Выполняем посещение...")
|
print(" 🔄 Выполняем посещение...")
|
||||||
result = await browser_service.visit_page_from_twitch(url, "jentteno", reading_time)
|
result = await browser_service.visit_page(url, reading_time)
|
||||||
|
|
||||||
elapsed = time.time() - start_time
|
elapsed = time.time() - start_time
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user