# vprok.ru (Перекрёсток Впрок) — API Research > Исследование проведено: 2026-03-31 > Статус: задокументированы известные endpoints + ограничения доступа --- ## ⚠️ Критичное ограничение: DDoS Guard Сайт vprok.ru защищён DDoS Guard (ошибка #625116), который **блокирует все запросы с серверных/VPS IP-адресов**. Это означает: - Все прямые HTTP-запросы с сервера возвращают HTML-страницу с ошибкой (HTTP 200, но не данные) - Обход возможен только через **жилые прокси (residential proxies)** или запросы из реального браузера - Cookie от браузера **не помогают** — блокировка на уровне IP-репутации --- ## 1. Аутентификация ### Механизм Сайт использует **cookie-based аутентификацию** с Laravel-style remember-me токеном. ### Ключевая cookie ``` remember_xo-fo_ = ``` Пример имени: `remember_xo-fo_4546ffd47bc4accc5866998d8b` Cookie устанавливается при входе с галочкой "Запомнить меня". Срок действия — длительный (обычно 1 год). **Дополнительная cookie от DDoS Guard:** ``` ngx_s_id = ``` Устанавливается при первом посещении. Без неё запросы блокируются. ### Как получить cookie (ручной шаг — обязателен) 1. Зайти на vprok.ru в браузере, авторизоваться 2. Открыть DevTools → Application → Cookies → `www.vprok.ru` 3. Найти cookie `remember_xo-fo_*` — скопировать имя и значение 4. Также скопировать `ngx_s_id` 5. Передать в клиент ### Программная авторизация Сайт, судя по всему, **не предоставляет публичный OAuth или API для логина**. Авторизация идёт через форму на странице `/login` с CSRF-токеном. Теоретически: ``` POST https://www.vprok.ru/login Content-Type: application/x-www-form-urlencoded _token=&login=&password=&remember=on ``` Но из-за DDoS Guard это работает **только с жилых IP**. --- ## 2. Поиск товаров ### Известные endpoints | Endpoint | Метод | Описание | |----------|-------|---------| | `GET /catalog/search?text=` | GET | HTML-страница результатов поиска | | `GET /catalog/search?text=&page=` | GET | Пагинация | ### Вероятный AJAX API (требует верификации) На основании анализа аналогичных сайтов и паттернов: ``` GET /api/v1/catalog/search?text=молоко&limit=20&page=1 Accept: application/json Cookie: remember_xo-fo_*=...; ngx_s_id=... ``` Ожидаемая структура ответа: ```json { "items": [ { "id": "12345", "name": "Молоко 3.2% 1л", "price": 89.90, "oldPrice": null, "unit": "шт", "available": true, "image": "https://...", "link": "/product/catalog/moloko-1l" } ], "total": 150, "page": 1, "limit": 20 } ``` ### HTML-парсинг (рабочий вариант) Данные о товарах закодированы в атрибутах HTML-элементов: ```html
  • ``` --- ## 3. Корзина (Basket/Cart) ### Предполагаемые endpoints | Endpoint | Метод | Описание | |----------|-------|---------| | `GET /basket` | GET | HTML страница корзины | | `POST /basket/add` | POST | Добавить товар | | `POST /basket/update` | POST | Изменить количество | | `POST /basket/remove` | POST | Удалить товар | | `GET /api/v1/basket` | GET | JSON корзина (AJAX) | ### Вероятный формат добавления товара ``` POST https://www.vprok.ru/basket/add Content-Type: application/json X-CSRF-TOKEN: Cookie: remember_xo-fo_*=...; ngx_s_id=... { "product_id": "12345", "quantity": 2 } ``` Или форм-данными: ``` product_id=12345&quantity=2&_token= ``` --- ## 4. Заказы (Orders) Подтверждённые endpoints (из PerekrestokOrderParser): | Endpoint | Метод | Описание | |----------|-------|---------| | `GET /profile/orders/history` | GET | Список заказов (HTML) | | `GET /profile/orders/details//?type=online` | GET | Детали заказа (HTML) | Данные парсятся из HTML через BeautifulSoup. --- ## 5. Слоты доставки Предполагаемые endpoints: ``` GET /api/v1/delivery/slots?date=2026-04-01 GET /checkout/delivery # HTML страница выбора слота ``` --- ## 6. Сессионные данные | Cookie | Описание | |--------|---------| | `ngx_s_id` | DDoS Guard session ID (устанавливается автоматически) | | `remember_xo-fo_` | Remember-me аутентификация (нужна для авторизованных запросов) | | `XSRF-TOKEN` | CSRF защита для POST-запросов | | `laravel_session` | PHP/Laravel сессия | --- ## 7. Как обойти DDoS Guard ### Вариант A: Жилые прокси (Residential Proxies) ```python proxies = { "http": "http://user:pass@residential-proxy.example.com:8080", "https": "http://user:pass@residential-proxy.example.com:8080" } requests.get(url, proxies=proxies) ``` ### Вариант B: Запросы с домашнего компьютера Скрипт должен выполняться с жилого IP (домашний интернет), не с сервера/VPS. ### Вариант C: Прокидывание через браузер Использовать selenium/playwright для получения cookies с жилого IP, затем переиспользовать в requests. --- ## 8. Источники - [MaLevi4/PerekrestokOrderParser](https://github.com/MaLevi4/PerekrestokOrderParser) — подтверждает cookie-аутентификацию - Прямое тестирование (2026-03-31) — подтвердило DDoS Guard блокировку - Анализ HTML-структуры — атрибуты `data-owox-product-id` и др.