curl — старейший и, пожалуй, самый узнаваемый инструмент из всей категории «технических клиентов»: проект стартовал в 1996 году, его создал Дэниел Стенберг, а название расшифровывается просто как «see URL». За почти три десятилетия существования curl стал фактическим стандартом командной строки для HTTP-запросов на Linux, macOS и Windows — а заодно и одной из самых частых строк в access.log любого сайта, где-то между «безобидная проверка руками» и «автоматизированный обход по расписанию».
Любопытная деталь из истории: curl не всегда представлялся вообще
По официальной документации проекта, в самые ранние годы curl не отправлял заголовок User-Agent автоматически вовсе — он появлялся в запросе только если пользователь сам явно задавал его флагом -A. Формат по умолчанию curl/<версия>, который сегодня знаком любому администратору сайта, curl принял только в версии 7.15.5, вышедшей в 2002 году. То есть привычная сегодня идентификация — не изначальная особенность инструмента, а решение, принятое спустя годы после запуска проекта.
Параметры
| Параметр | Значение |
| Токен / паттерн | curl/, полная форма — curl/X.Y.Z с номером версии |
| Природа строки | Заголовок User-Agent по умолчанию командной утилиты curl (на основе библиотеки libcurl) — задокументировано в официальном руководстве проекта |
| Оператор | ❌ Множество независимых пользователей: ручные проверки, cron-задачи, CI/CD-пайплайны, скрипты мониторинга, автоматизированные интеграции — как и у Python-urllib, это не бренд, а инструмент |
| Изменение заголовка | Тривиально настраивается флагом -A/--user-agent в командной строке или программно через CURLOPT_USERAGENT в API libcurl — то есть отсутствие кастомизации почти всегда осознанный выбор автора скрипта, а не техническое ограничение |
| Соблюдение robots.txt | Не гарантировано — сам curl не читает и не интерпретирует robots.txt, это целиком ответственность автора скрипта, который его вызывает |
| Список IP-адресов | ❌ Неприменимо в принципе — источники организационно и географически не связаны |
Почему дефолтный UA curl — сигнал скорее небрежности, чем скрытности
Поскольку изменить заголовок в curl можно одной короткой опцией командной строки, оставшаяся дефолтная строка curl/X.Y.Z в логах обычно говорит не о попытке замаскироваться, а о том, что автор запроса не задумался об идентификации: это могла быть быстрая ручная проверка доступности страницы, забытая тестовая cron-задача или наспех написанный скрипт мониторинга. У по-настоящему целенаправленных скраперов, наоборот, чаще встречается либо полностью подделанный браузерный UA (чтобы не выделяться вовсе), либо явно кастомизированная строка — тогда как «голый» дефолт curl статистически ближе к категории «забыли настроить», чем «намеренно скрылись».
Подключите домен и посмотрите живую ленту: кто пришёл, с какой сети, что запрашивал и по какому правилу был пропущен или заблокирован.
Как найти в логах
grep -i "curl/" /var/log/nginx/access.log
Поскольку это не единый оператор, привычная схема верификации через whois/ASN может подтвердить происхождение отдельного IP, но не скажет ничего о характере всего класса трафика в целом — у каждого использования curl своя причина и своя инфраструктура.
Как настроить доступ
Для публичного сайта разумная политика по умолчанию — рассматривать нераспознанный дефолтный UA curl как сигнал автоматизации без установленной политики, требующий отдельного решения по контексту:
if ($http_user_agent ~* "curl/") {
return 403;
}
Если внутри организации есть собственные легитимные скрипты на curl (health-check, интеграции, автоматизация деплоя), правильное решение — задать им собственный узнаваемый User-Agent, а не оставлять неотличимыми от общего фона:
curl -A "CompanyName-HealthCheck/1.0 (+https://example.com/bot-info)" https://example.com/status
Правило в robots.txt для этого класса трафика чаще всего работает слабо — сам curl его попросту не читает и не интерпретирует, поэтому основной контроль стоит держать на уровне сервера (блокировка, rate-limit или challenge), а не полагаться на добровольное соблюдение файла политики.
Частые вопросы
curl — это конкретный бот или сервис?
Правда ли, что curl не всегда отправлял User-Agent?
Означает ли дефолтная строка curl/версия целенаправленный скрапинг?
Соблюдает ли curl правила robots.txt?
Что делать со своими легитимными скриптами на curl?
Работает ли блокировка через robots.txt для этого класса трафика?
Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак. Разборы ботов пишем по логам подключённых доменов и открытым данным операторов.