🖧 Как проверить правильность URL-адреса из оболочки Linux |

🖧 Как проверить правильность URL-адреса из оболочки Linux

Мануал

Обзор

При работе в среде оболочки бывают случаи, когда необходимо проверить, действителен ли URL-адрес, прежде чем использовать его для других операций.

В этом уроке мы узнаем несколько простых и эффективных способов проверить, существует ли URL, прямо из нашей оболочки.

🐧 Внутренние и внешние команды оболочки Linux

Основные методы проверки URL

В оболочке в нашем распоряжении есть два основных инструмента для проверки существования URL. Этими инструментами являются curl и wget.

Использование curl

curl – это инструмент командной строки, который мы можем использовать для передачи данных на серверы или с серверов по различным протоколам (включая HTTP и HTTPS).

Среди множества его возможностей, мы можем использовать curl для проверки того, указывает ли URL на реальный, доступный ресурс.

Теперь давайте рассмотрим несколько различных способов использования curl.

🖧 Wcurl: Удобная обёртка Curl для лёгкой загрузки файлов

Для начала давайте рассмотрим простой скрипт для проверки существования URL-адреса с помощью curl:

!/bin/bash
if curl --head --silent http://www.baeldung.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

Давайте разберем ключевые части этого скрипта:

  • curl: это инструмент командной строки, который мы используем для взаимодействия с веб-сайтом
  • -head: указывает curl использовать только забор «заголовочной» информации с веб-сайта, а не скачивать всю веб-страницу целиком
  • -silent: поддерживает порядок, скрывая обычный прогресс и статусный вывод curl
  • > /dev/null 2>&1: отправляет стандартный вывод (stdout) и стандартную ошибку (stderr) в /dev/null, эффективно отбрасывая любой вывод, который мог бы произвести curl

Кроме того, оператор if проверяет код выхода команды curl. Если он равен 0 (успех), то URL существует и доступен.

Если же код выхода ненулевой (ошибка), то URL может не существовать или возникла проблема с соединением.

Далее рассмотрим, как можно сохранить код ответа HTTP в переменной для дальнейшей обработки ошибок:

!/bin/bash
result=$(curl --head --silent --write-out «%{http_code}» --output /dev/null https://www.google.com/)
if [[ $result -eq 200 ]]; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

В приведенном выше блоке кода ключевым дополнением является -write-out «%{http_code}».

Это указывает curl включить в вывод код состояния сайта по протоколу HTTP.

Затем мы фиксируем этот вывод в переменной result.

Кроме того, оператор if проверяет значение переменной result.

Если оно равно 200, это означает, что URL существует.

Однако если результат не равен 200, возможно, возникла проблема или URL не существует.

Использование wget

wget – это инструмент, который мы можем использовать для загрузки файлов из Интернета.

Он также предоставляет удобный способ проверки существования URL.

🖧 В чем разница между curl и Wget?

Теперь давайте посмотрим, как работает wget:

!/bin/bash
if wget --spider https://www.facebook.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

В приведенном выше скрипте:

  • wget: пытается загрузить файлы с веб-сайта
  • -spider: указывает wget проверить, существует ли файл или ресурс, не скачивая его на самом деле
  • > /dev/null 2>&1: перенаправляет весь вывод в /dev/null, чтобы отбросить его.

Как и в curl, wget использует коды выхода для передачи результатов операции.

Как правило, код выхода 0 означает успех (URL существует), в то время как другие коды указывают на ошибку или несуществование URL.

Кроме того, мы можем полностью изменить вывод wget, что приведет к более чистому выполнению скрипта.

Давайте разберемся, как работает эта опция:

!/bin/bash
if wget --spider -q https://www.google.com; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

В приведенном выше примере параметр -q указывает wget работать в тихом режиме, не выводя никаких данных на консоль.

Остальная часть скрипта работает так же, как и в предыдущем примере.

Таким образом, хотя wget в первую очередь предназначен для загрузки файлов, его режим -spider – это быстрый и простой способ проверить, существует ли веб-сайт или ресурс.

Дополнительные соображения

Просто знать, существует ли URL, – это прекрасно.

Но иногда нам может понадобиться, чтобы наш скрипт действовал по-разному в зависимости от причины, по которой проверка URL не удалась.

Мы также можем захотеть, чтобы наши скрипты справлялись с ситуациями, когда веб-сайты просто медленно отвечают.

Давайте узнаем, как сделать наши скрипты более адаптируемыми к таким ситуациям.

Обработка общих кодов состояния HTTP в ответах

Веб-сайты сообщают о текущих условиях с помощью кодов состояния HTTP.

Понимая эти коды, мы можем настраивать наши скрипты, чтобы принимать обоснованные решения о том, как действовать дальше.

🌐 Настройка заголовков безопасности HTTP на сервере Nginx / Apache

Давайте узнаем о нескольких часто встречающихся кодах состояния HTTP:

  • 200 (OK): это код успеха! Он означает, что страница или ресурсы, которые мы запросили, существуют и сервер отправил их правильно.
  • 404 (Not found): означает, что запрошенная нами страница или ресурс не существует на сервере. Причиной ошибки может быть опечатка в URL-адресе, или страница могла быть удалена.
  • 403 (Forbidden): распространенный код состояния, когда мы пытаемся получить доступ к веб-странице, требующей входа или специальных разрешений.
  • 301 (Moved permanently): сигнализирует о том, что запрашиваемый нами ресурс был перемещен по новому адресу. Нам нужно обновить наш скрипт, чтобы отразить это изменение.

Помимо этих стандартных кодов, вы можете встретить код состояния 000. Этот код не является стандартным и используется такими инструментами, как curl, чтобы указать, что HTTP-ответ не был получен.

Код состояния 000 может возникнуть в случае сетевого таймаута, проблемы с DNS или обрыва соединения до того, как сервер сможет ответить.

Например, давайте создадим скрипт, который будет обрабатывать некоторые распространенные HTTP-коды и код 000:

!/bin/bash
url=”https://www.google.com»
status_code=$(curl --head --silent --output /dev/null --write-out ‘%{http_code}’ «$url»)
case $status_code in
200)
echo «URL существует»
;;
404)
echo «Ошибка 404: Не найдено.»
;;
403)
echo «Ошибка 403: Запрещено.»
;;
301)
echo «Ошибка 301: Перемещено навсегда.»
;;
000)
echo «Ответ не получен.»
;;
*)
echo «Неожиданный код состояния: $status_code. Требуется дальнейшее устранение неполадок»
;;
esac

Настройки таймаута

При работе с URL-адресами мы можем столкнуться с медленными или не реагирующими на запросы веб-сайтами.

Однако, установив таймаут в наших скриптах, мы можем сделать так, чтобы скрипты не зависали до бесконечности.

Рассмотрим простой пример:

!/bin/bash
url=”https://www.google.com»
response=$(curl --connect-timeout 10 --max-time 15 --silent --head --write-out «%{http_code}» --output /dev/null «$url»)
echo «Код статуса HTTP: $response»

В приведенном выше примере:

  • -connect-timeout 10: указывает curl на попытку подключения в течение максимум 10 секунд. Также, если за это время не удастся подключиться, скрипт сдастся, и curl вернет код состояния 28
  • -max-time 15: устанавливает максимальное время в 15 секунд для всего запроса (включая подключение и получение ответа).

Таким образом, таймаут помогает нашим скриптам не застревать на медленных или не реагирующих на запросы сайтах.

Кроме того, используя опции curl -connect-timeout и -max-time, мы можем сделать работу скриптов более плавной.

Заключение

В этой статье мы рассмотрели, как проверить существование URL-адресов из среды оболочки.

Используя такие инструменты, как curl и wget, мы создали скрипты, проверяющие доступность сайтов.

Кроме того, мы узнали о кодах состояния HTTP, что позволяет нам создавать еще более умные скрипты.

Этот скрипт по-разному реагирует на такие коды состояния, как отсутствующие страницы (404) или ограничения доступа (403).

Наконец, задав тайм-ауты, мы убедились, что наш скрипт не зависнет, когда сайты работают медленно или не реагируют на запросы.

Эти навыки необходимы для автоматизации задач, создания инструментов мониторинга или более эффективных скриптов для взаимодействия с веб-ресурсами.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий