Битлента
Сетевые команды и утилиты6 мин чтения·

curl: как получить код ответа HTTP и проверить статус страницы

Как одной командой curl узнать код ответа сайта, не скачивая содержимое: ключи -s, -o, -w, проверка по списку адресов и разбор кодов выхода.

Кратко

Команда curl -s -o /dev/null -w "%{http_code}" example.com печатает только трёхзначный код ответа. В Windows используйте curl.exe и NUL вместо /dev/null. Код 000 означает, что ответа не было вовсе.

Минимальная команда для проверки статуса

Код ответа HTTP — это первое, что нужно знать, когда страница «не открывается»: сервер вообще отвечает, отвечает ли ошибкой и какой именно. Браузер показывает красивую страницу-заглушку и часто прячет исходный код, а curl выдаёт его в одну строку и годится для скриптов.

Базовая форма выглядит так: curl -s -o /dev/null -w "%{http_code}" example.com. Здесь -s отключает индикатор загрузки, -o /dev/null отправляет тело ответа в никуда, а -w задаёт формат вывода после завершения запроса. Переменная http_code подставляет итоговый код. Чтобы результат не слипался с приглашением командной строки, добавьте перевод строки: -w "%{http_code}\n".

Пример вывода (пример): после выполнения команды в терминале появится 200. Это значит, что сервер принял запрос и вернул страницу. Если адрес указан без схемы, curl по умолчанию пойдёт по http, а не по https, поэтому для проверки защищённой версии схему стоит указать явно.

КлючЧто делает
-sТихий режим, без полосы прогресса
-o файлЗаписывает тело ответа в файл вместо вывода на экран
-w форматПечатает выбранные переменные после запроса
-IОтправляет запрос HEAD и показывает только заголовки
-LСледует за перенаправлениями

Отличия для Windows, macOS и Linux

В Linux и macOS curl установлен по умолчанию, а нулевое устройство называется /dev/null. В Windows 10 и 11 утилита тоже есть в составе системы, но в Windows PowerShell 5.1 слово curl является псевдонимом для командлета Invoke-WebRequest, и ключи вроде -s он не поймёт. Поэтому пишите curl.exe с расширением. Вместо /dev/null подставляйте NUL: curl.exe -s -o NUL -w "%{http_code}" example.com.

Кавычки тоже различаются. В командной строке cmd двойные кавычки работают как обычно, а если команда лежит в bat-файле, знак процента нужно удваивать: %%{http_code}. В PowerShell выражение с фигурными скобками и процентом лучше брать в одинарные кавычки, чтобы оболочка не пыталась его интерпретировать. В bash и zsh подойдут и двойные, и одинарные.

Если вы работаете в PowerShell 7, псевдоним curl там убран, и вызов работает без расширения. Но привычка писать curl.exe безопасна в любой версии, потому что не зависит от настроек профиля.

Как читать полученный код

Первая цифра задаёт класс ответа, и уже по ней можно понять, где искать проблему.

КодСмыслКуда смотреть
200УспехСтраница отдаётся, проблема, скорее всего, на стороне браузера или кэша
301, 302, 307, 308ПеренаправлениеДобавьте -L или смотрите заголовок Location
401, 403Нужна авторизация или доступ ограниченПроверьте учётные данные и правила сервера
404Адрес не найденОпечатка в пути или страница удалена
429Слишком много запросовСнизьте частоту проверок
500, 502, 503, 504Ошибка на стороне сервера или шлюзаПовторите позже, сообщите владельцу сайта
000Ответа нетНе удалось разрешить имя, соединиться или дождаться ответа

Код 000 curl печатает, когда HTTP-обмен не состоялся. В этом случае смотрите код завершения самой программы. Он лежит в переменной $? в Linux и macOS или в %errorlevel% в cmd. Часто встречаются 6 (не удалось разрешить имя хоста), 7 (не удалось подключиться), 28 (истекло время ожидания), 35 (ошибка установки TLS-соединения) и 60 (сертификат сервера не прошёл проверку). Для подробностей к 000 добавьте ключ -v, он покажет, на каком этапе оборвалось соединение.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Проверка сразу нескольких адресов

Чаще всего нужна не одна страница, а десяток. В Linux и macOS это решается коротким циклом: создайте файл urls.txt по одному адресу на строку и выполните while read u; do echo -n "$u "; curl -s -o /dev/null -w "%{http_code}\n" --max-time 10 "$u"; done < urls.txt. Каждая строка результата будет содержать адрес и код.

В PowerShell можно пройти по строкам файла циклом foreach ($u in Get-Content urls.txt) и внутри вызвать curl.exe с теми же ключами. Ключ --max-time обязателен: без него зависший сервер остановит весь список. Между запросами полезно делать паузу в секунду-две, чтобы не создавать лишней нагрузки на чужой сайт и не попасть под ограничение по частоте.

Проверять таким способом стоит свои сайты и сервисы либо публичные страницы разумным числом запросов. Массовые запросы к чужим ресурсам могут быть расценены как злоупотребление.

Типичные ошибки при получении кода

  • Забыли -L, и вместо итогового 200 получили 301: адрес перенаправляет на другую версию, например с http на https или с одного имени на другое.
  • Использовали -I и получили 405: не все серверы принимают HEAD. В таком случае достаточно обычного GET с выбрасыванием тела через -o.
  • В PowerShell вызвали curl без .exe и получили сообщение о неизвестном параметре.
  • Проверяли адрес без схемы и не заметили, что curl пошёл по http, а не по https.
  • Не задали таймаут в скрипте, и один недоступный адрес завис на минуты.
  • Приняли 200 за признак корректной работы. Некоторые сайты отдают 200 вместе с сообщением об ошибке в тексте страницы, и на такие случаи стоит смотреть ещё и на размер ответа через переменную size_download.

Если нужно понять, почему запрос медленный, а не почему он не проходит, переходите к измерению этапов через ключ -w с временными переменными. А если код странный и вы хотите увидеть заголовки целиком, вам поможет соседняя инструкция про ключи -I и -L.

Код ответа в автоматизации и мониторинге

Проверку кода удобно превратить в простой мониторинг собственного сайта. В Linux достаточно записать в файл расписания задачу, которая раз в несколько минут вызывает curl с ключом --max-time и записывает время и код в журнал. Если код отличается от ожидаемого, скрипт отправляет вам уведомление. Для этого не нужно специальное программное обеспечение: ключ -f заставляет curl завершаться с ненулевым кодом на ответах 4xx и 5xx, а условный оператор оболочки реагирует на этот код.

Учтите две особенности. Во-первых, проверять надо конечную страницу, а не редирект: используйте -L, иначе мониторинг будет успешно получать 301 и не заметит, что итоговая страница недоступна. Во-вторых, лучше проверять не только код, но и признак содержимого: можно добавить в вывод size_download и сравнить размер с обычным. Если страница внезапно стала весить пару сотен байт вместо десятков килобайт, сервер, вероятно, отдаёт страницу-заглушку под видом успеха.

Для сайтов за системой защиты от роботов запрос без обычного User-Agent может получить отказ, хотя в браузере всё открывается. В таких случаях сравнивайте результат с тем, что видит настоящий клиент, и не делайте выводов только по одному ответу.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
curlhttpдиагностикакомандная строка

Часто задаваемые вопросы

Читайте также