Compare commits
No commits in common. "2e97c81274f29b72f7aef97bc58429a371ca5bf3" and "7cb037a919ec65196fba88bff886fd43e613822b" have entirely different histories.
2e97c81274
...
7cb037a919
2 changed files with 4 additions and 20 deletions
|
|
@ -101,7 +101,7 @@ from app.core.config import settings
|
||||||
from app.core.shutdown import shutdown_requested
|
from app.core.shutdown import shutdown_requested
|
||||||
from app.services import domclick_session as domclick_session_svc
|
from app.services import domclick_session as domclick_session_svc
|
||||||
from app.services import scrape_runs as runs_mod
|
from app.services import scrape_runs as runs_mod
|
||||||
from app.services.scrape_runs import BAN_KIND_PLATFORM, BAN_KIND_UNKNOWN
|
from app.services.scrape_runs import BAN_KIND_UNKNOWN
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -164,32 +164,17 @@ def _warn_before_domclick_cookies_expire(db: Session, run_id: int) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# 401 у ДомКлика — тот же отказ площадки, что 403 (замер прод 2026-08-29): страница отказа
|
|
||||||
# при 401 РОВНО 26 624 байта, байт в байт совпадает со страницей `403 | Домклик`
|
|
||||||
# (снята 28.08.2026), без PoW/QRATOR/капчи. Приходит одинаково и с валидной сохранённой
|
|
||||||
# сессией (16 куков domclick_session), и полностью анонимно — значит это не «сессия
|
|
||||||
# отвергнута» (тогда анонимный запрос вёл бы себя иначе), а WAF-отказ с подменённым кодом.
|
|
||||||
# Правка ДОМЕННАЯ, не в общей ban_kind_from_status (scraper_kit.browser_fetcher): у других
|
|
||||||
# поставщиков 401 обычно значит «наша сессия протухла» (наша сторона) — общая метка
|
|
||||||
# 'platform' там зря запустила бы ротацию IP (#2611).
|
|
||||||
_DOMCLICK_REFUSAL_STATUSES = frozenset({401})
|
|
||||||
|
|
||||||
|
|
||||||
def _ban_kind_of_block(exc: DomClickBlockedError) -> str:
|
def _ban_kind_of_block(exc: DomClickBlockedError) -> str:
|
||||||
"""Диагноз одного блока по HTTP-статусу ответа площадки (#3196, #3178).
|
"""Диагноз одного блока по HTTP-статусу ответа площадки (#3196).
|
||||||
|
|
||||||
Форма повторяет avito_detail_backfill (ban_kind_of_exception → Counter →
|
Форма повторяет avito_detail_backfill (ban_kind_of_exception → Counter →
|
||||||
mark_backfill_finished(ban_kinds=...)), но опора другая: у Авито причину несёт
|
mark_backfill_finished(ban_kinds=...)), но опора другая: у Авито причину несёт
|
||||||
ТИП исключения (AvitoSidecarUnavailableError vs AvitoBlockedError), у Домклика
|
ТИП исключения (AvitoSidecarUnavailableError vs AvitoBlockedError), у Домклика
|
||||||
тип один на оба случая, поэтому смотрим статус. 401/403/429 → 'platform' (401 —
|
тип один на оба случая, поэтому смотрим статус. 403/429 → 'platform', 5xx →
|
||||||
доменное исключение из общего правила, см. _DOMCLICK_REFUSAL_STATUSES), 5xx →
|
|
||||||
'infra' (ban_kind_from_status), статуса нет → 'unknown' — не назначаем причину,
|
'infra' (ban_kind_from_status), статуса нет → 'unknown' — не назначаем причину,
|
||||||
которую не установили (#2764).
|
которую не установили (#2764).
|
||||||
"""
|
"""
|
||||||
status = getattr(exc, "status", None)
|
return ban_kind_from_status(getattr(exc, "status", None)) or BAN_KIND_UNKNOWN
|
||||||
if status in _DOMCLICK_REFUSAL_STATUSES:
|
|
||||||
return BAN_KIND_PLATFORM
|
|
||||||
return ban_kind_from_status(status) or BAN_KIND_UNKNOWN
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,6 @@ def _ban_kinds_of(runs: MagicMock) -> Counter:
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("status", "expected"),
|
("status", "expected"),
|
||||||
[
|
[
|
||||||
(401, "platform"), # прод 28-29.08: страница отказа байт-в-байт как у 403
|
|
||||||
(403, "platform"), # ровно тот случай, что намеряли вживую: `403 | Домклик`
|
(403, "platform"), # ровно тот случай, что намеряли вживую: `403 | Домклик`
|
||||||
(429, "platform"),
|
(429, "platform"),
|
||||||
(500, "infra"),
|
(500, "infra"),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue