разобрать http заголовок ответа от wget - PullRequest
10 голосов
/ 19 ноября 2008

Я пытаюсь извлечь строку из результата 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/>

Это не возвращает мне строку, которая содержит строку. Я просто хочу проверить, работает ли сайт или администратор сайта.

Ответы [ 5 ]

19 голосов
/ 19 ноября 2008

Вывод искомого wget написан на stderr. Вы должны перенаправить его:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 
9 голосов
/ 19 ноября 2008

wget печатает заголовки в stderr, а не в stdout. Вы можете перенаправить stderr на стандартный вывод следующим образом:

wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302"

Часть "2> & 1" говорит о необходимости перенаправить ('>') файловый дескриптор 2 (stderr) к файловому дескриптору 1 (stdout).

2 голосов
/ 20 мая 2014

wget --server-response http://www.amazon.de/xyz 2> & 1 | awk '/ ^ HTTP / {print $ 2}'

2 голосов
/ 03 февраля 2011

Немного улучшенная версия уже предоставленного решения

wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2> & 1> / dev / null | grep -c 302

2>&1 >/dev/null обрежет ненужный вывод. Таким образом egrep будет анализировать только stgetr wget, что исключает возможность перехвата строк, содержащих 302, из stdout (где выводится сам html-файл + панель загрузки процесса с результирующим числом байтов e.t.c.):)

egrep -c считает количество совпадающих строк, а не просто выводит их. Достаточно знать, сколько строк соответствует egrep.

1 голос
/ 24 января 2012

Просто немного пояснить. Переключатель -S в исходном вопросе является сокращением для --server-response.

Кроме того, я знаю, что ОП указывает wget, но curl аналогичен и по умолчанию равен STDOUT.

curl --head --silent $yourURL

или

curl -I -s $yourURL

Переключатель --silent необходим только для возможности grep: (-s отключает индикатор% выполнения)

...