feat(tradein/proxy_rotation): ротация IP через mobileproxy.space (aproxy.site) #3298

Merged
lekss361 merged 1 commit from feat/mobileproxy-rotation-provider into main 2026-08-31 11:01:42 +00:00

1 commit

Author SHA1 Message Date
bot-backend
4968144693 feat(tradein/proxy_rotation): ротация IP через mobileproxy.space (aproxy.site)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m53s
Пул за всю историю не сделал ни одной ротации: rotate_proxy() жёстко привязан к
хосту api.asocks.com, а три купленных порта mobileproxy несут ссылки на
aproxy.site и отвергались до HTTP-вызова. При этом замер показал, что ротация —
единственное, что снимает выгорание адреса: один IP держит 18-20 карточек Авито
(четверти 100/44/0/0), со сменой каждые 15 обвал исчезает совсем (91/64/73/83).

Диспетчеризация по хосту rotate_url. Путь ASocks не тронут (POST + Bearer,
лимит 3/сутки). Для aproxy.site — GET с format=json без заголовков авторизации:
секрет лежит в самом URL, отправлять туда токен ASocks нельзя. Успех признаётся
по JSON status==OK, а не по HTTP-коду. new_ip пишется в scrape_proxies.exit_ip,
rt отдаётся как RotationResult.reconnect_delay_s — следующей задаче он нужен,
чтобы выждать переподключение канала: замер показал, что сразу после смены IP
две карточки уходят в таймаут.

Отдельный предохранитель MOBILEPROXY_DAILY_ROTATION_LIMIT=200/сутки: кулдауна у
провайдера не обнаружено (13 ротаций подряд дали 13 уникальных адресов), потолок
нужен только против runaway-цикла.
2026-08-31 13:39:49 +03:00