fix(tradein/domclick): 401 — тот же отказ площадки, что 403, а классифицировался как unknown (#3196) #3204
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3204
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3196-domclick-401"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Дополняет #3202 (issue #3196). Без этой правки предыдущий PR чинит механизм, но не тот статус, который ДомКлик отдаёт в реальности.
Замер на проде (2026-08-29, боевой контейнер
tradein-scraper)После деплоя #3202 прогнал три карточки подряд через боевой путь — с сохранённой сессией и без:
Страница отказа при 401 — ровно 26 624 байта, байт в байт та же, что снималась 28.08 под кодом
403 | Домклик. Ниstartpow, ни QRATOR, ни капчи. Приходит одинаково и с валидной сессией на 16 куков, и полностью анонимно — значит это не «сессия отвергнута» (тогда анонимный запрос вёл бы себя иначе), а WAF-отказ с подменённым кодом ответа.В таблице классификатора 401 не было (
403/429 → platform,5xx → infra), поэтомуban_kind_from_status(401)вернулNone, а_ban_kind_of_blockподставилunknown— ровно то, что #3196 и должен был убрать.Что радует отдельно
Механика диагноза оказалась полностью рабочей: статус доезжает от
page.gotoчерез сайдкар до.statusисключения целымint. То есть шовproviders/domclick/detail.py::fetch_detail(blocked.status = status), который в #3202 остался без теста и был отмечен там как известный пробел, теперь подтверждён живым 401 на проде.Почему правка доменная, а не в общей функции
scraper_kit.browser_fetcher.ban_kind_from_statusне тронута. У других поставщиков 401 обычно значит «наша сессия протухла» — это наша сторона, и общая меткаplatformтам зря запустила бы ротацию IP (#2611). Исключение живёт в домкликовом таске, где обосновано замером.Проверка
tradein-mvp/backend: 4972 passed, 37 skippedruff checkчисто401 → platform(новых тестов не заводил)Смежное наблюдение (в этом PR не чинится)
Detail-путь ДомКлика обходит пул прокси (
use_pool/proxy_provider— дефолты, #3197) и берёт статическийSCRAPER_PROXY_URL. Сейчас он указывает на190.2.145.131:10313— это узел 9asocks-mobile-1, у которогоenabled = f,consecutive_fails = 7и пустойexit_ip. То есть ДомКлик выходит через узел, который пул сам признал негодным, при живых включённых 10 и 11. Возможно, после #3197 эти 401 исчезнут сами.