проанализировать заголовок HTTP-ответа из wget
Вопрос
Я пытаюсь извлечь строку из результата wget, но у меня с этим проблемы.Это мой вызов wget:
$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html
Выход:
--18:24:12-- http://xxx.xxxx.xxxx:15000/myhtml.html => `-' Resolving xxx.xxxx.xxxx... xxx.xxxx.xxxx Connecting to xxx.xxxx.xxxx|xxx.xxxx.xxxx|:15000... connected. HTTP request sent, awaiting response... HTTP/1.1 302 Found Date: Tue, 18 Nov 2008 23:24:12 GMT Server: IBM_HTTP_Server Expires: Thu, 01 Dec 1994 16:00:00 GMT Location: https://xxx.xxxx.xxxx/siteminderagent/... Content-Length: 508 Keep-Alive: timeout=10, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 Location: https://xxx.xxxx.xxxx//siteminderagent/... --18:24:13-- https://xxx.xxxx.xxxx/siteminderagent/... => `-' Resolving xxx.xxxx.xxxx... failed: Name or service not known.
если я сделаю это:
$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html | egrep -i "302" <br/>
Он не возвращает мне строку, содержащую эту строку.Я просто хочу проверить, работает ли сайт или Siteminder.
Решение
Вывод wget, который вы ищете, записан на stderr.Вы должны перенаправить его:
$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302"
Другие советы
wget
печатает заголовки в stderr, а не в stdout.Вы можете перенаправить stderr на stdout следующим образом:
wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302"
Часть «2>&1» говорит о перенаправлении ('>') файлового дескриптора 2 (stderr) на файловый дескриптор 1 (stdout).
Немного улучшенная версия уже предоставленного решения
wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 >/dev/null | grep -c 302
2>&1 >/dev/null
обрежет ненужный вывод.Таким образом, egrep будет анализировать только stderr wget, что исключает возможность перехвата строк, содержащих 302, из стандартного вывода (где выводится сам html-файл + панель процесса загрузки с результирующим количеством байтов и т. д.) :)
egrep -c
подсчитывает количество совпавших строк, а не просто выводит их.Достаточно, чтобы узнать, сколько строк соответствует egrep.
wget --server-response http://www.amazon.de/xyz 2>&1 | awk '/^ HTTP/{print $2}'
Просто чтобы немного пояснить.В -S
переключатель в исходном вопросе является сокращением от --server-response
.
Кроме того, я знаю, что указан ОП wget
, но curl
аналогичен и по умолчанию имеет значение STDOUT.
curl --head --silent $yourURL
или
curl -I -s $yourURL
В --silent
переключатель нужен только для grep
-способность:(-s
отключает индикатор прогресса)