Строка okhttp в access.log отличается от большинства других записей в этой энциклопедии: за ней не стоит одна конкретная компания или продукт. OkHttp — это открытая библиотека для HTTP-запросов, и её могут использовать буквально тысячи разных мобильных приложений, серверных сервисов и скриптов. Разбираемся, что это значит на практике и почему одной строки UA здесь категорически недостаточно для решения allow/deny.
Что такое OkHttp на самом деле
OkHttp — open-source библиотека для сетевых запросов, разработанная компанией Square (сейчас часть Block) для JVM, Android и GraalVM. Она экономит трафик за счёт HTTP/2, пула соединений и прозрачного gzip, умеет переживать сетевые сбои и держит современный TLS — поэтому стала одной из самых массово используемых сетевых библиотек в Android-экосистеме и Java/Kotlin-бэкендах. Именно эта популярность и создаёт путаницу: любое мобильное приложение, написанное на Kotlin или Java, скорее всего, использует OkHttp «под капотом» — от банковских приложений до крупных агрегаторов и рядового скрипта, который написал разработчик для парсинга сайта.
| Параметр | Значение |
| Название | OkHttp |
| User-Agent / паттерн | okhttp/<версия> (например, okhttp/4.9.0) — часто без дополнительного контекста |
| Оператор | Не единая компания — библиотека Square/Block, встроенная в тысячи независимых приложений и сервисов |
| Категория TrafficVeil | Технический клиент (генерическая сетевая библиотека, а не бот конкретного оператора) |
| Что делает на сайте | Зависит целиком от того, какое приложение или скрипт стоит за конкретным запросом — от банального API-вызова до скрапинга |
| Список IP | ❌ Список невозможен в принципе — источников бесчисленное множество |
| robots.txt | Поведение зависит от приложения-обёртки, а не от самой библиотеки — она не имеет собственной политики |
| Пометка TrafficVeil | Легитимный статус библиотеки не переносится автоматически на конкретного клиента — решение по каждому случаю индивидуально |
Почему UA почти ничего не говорит о намерениях
По умолчанию OkHttp добавляет к запросу минимальную строку — только имя библиотеки и её версию, без упоминания приложения, пакета или устройства. Разработчик может (и часто должен) переопределить User-Agent, добавив название своего приложения, версию и другие детали — тогда строка выглядит примерно так: okhttp/3.11.0; CEO Mobile; Android 4.0.1; com.example.app; build:51. Голая, «недекорированная» строка вида okhttp/4.9.0 без такого контекста — слабый сигнал сама по себе: это может быть как совершенно нормальное мобильное приложение с ленивой настройкой UA, так и скрипт, написанный специально для обхода защиты.
Зачем OkHttp-клиент может приходить на сайт
Причины предельно разные: мобильное приложение вашего собственного бизнеса обращается к вашему же API; приложение партнёра или агрегатора запрашивает данные по легитимной интеграции; сторонний разработчик написал скрипт для мониторинга или парсинга на Kotlin/Java; либо это попытка скрапинга или подбора, замаскированная под обычный клиент. Сама по себе строка okhttp не различает эти сценарии — различие всегда в деталях: какие URL запрашиваются, с какой частотой и насколько поведение похоже на реальное приложение.
Как найти OkHttp в логах
# Базовый поиск
grep -i "okhttp" /var/log/nginx/access.log
# Полная строка UA — ищем декорированные версии с названием приложения
grep -i "okhttp" /var/log/nginx/access.log | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head
# Топ URL
grep -i "okhttp" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head
# Топ IP
grep -i "okhttp" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Поскольку список IP в принципе невозможен, для каждого конкретного случая приходится проверять IP/ASN отдельно и смотреть, укладывается ли поведение в ожидаемый паттерн реального клиента (например, вашего собственного мобильного приложения):
IP="1.2.3.4"
whois -h whois.cymru.com " -v $IP"
robots.txt и блокировка через TrafficVeil
# Разрешить (стандартный вариант для API/мобильного трафика)
User-agent: okhttp
Allow: /
# Ограничить частоту без полного запрета
User-agent: okhttp
Allow: /
TrafficVeil: прежде чем принимать решение по okhttp, выясните, не ваш ли это собственный мобильный трафик или трафик известного партнёра — в этом случае блокировка сломает часть вашего продукта. Если декорированной информации в UA нет, а поведение похоже на массовый обход (много URL подряд, высокая частота, концентрация на данных, не предназначенных для внешнего доступа) — это повод для rate-limit или блокировки как обычного неопознанного скрапера, а не потому что «okhttp = плохо».
С кем можно перепутать OkHttp
| Клиент | Экосистема | Комментарий |
| go-http-client | Go | Аналог OkHttp для Go-приложений и сервисов |
| Apache HttpClient | Java | Более старая, тоже массово используемая Java-библиотека для HTTP-запросов |
| python-requests / aiohttp | Python | Стандартные библиотеки для HTTP в Python-скриптах и сервисах |
| curl | Кросс-платформенный | Классический универсальный HTTP-клиент командной строки |
Все они объединены одним принципом: это инструменты, а не самостоятельные операторы, и легитимность конкретного запроса определяется не именем библиотеки, а тем, кто и зачем её использует в данном случае.
Что в итоге делать с OkHttp
| Ситуация | Действие |
| Трафик похож на собственное мобильное приложение или известного партнёра | Allow без ограничений |
| UA «голый», без контекста, поведение похоже на массовый обход | Rate-limit, затем точечный Disallow / запрет в TrafficVeil |
| Явные признаки скрапинга закрытых данных или подбора | Блокировать сразу — как обычного неопознанного бота, независимо от имени библиотеки |
| Непонятно, что за источник, а нагрузка небольшая | Зафиксировать и понаблюдать перед тем, как принимать решение |