Как я получаю (только) http состояние сайта в сценарии оболочки?

Короткий ответ: не возможный. Трудность получения точных зависимостей от исходного распределения является причиной, почему управление пакетом так популярно на Linux (хорошо, одна из нескольких причин). На самом деле, если Вы просто должны были сделать его и не заботитесь так, как, самый надежный способ получить зависимости будет состоять в том, чтобы, вероятно, захватить пакет дистрибутива (хинду ebuilds легки работать с), и вытяните список зависимостей от этого.

Иначе, если Вы удачливы, специалисты по обслуживанию создадут список зависимостей в файле README или подобный - это было бы первым местом для проверки. Приводя это к сбою, если это - проект C и Вы не возражаете пачкать руки, можно посмотреть в настраивать сценарии (или еще лучше configure.ac или независимо от того, что это сгенерировано от), и выясните зависимости от этого на основе того, что это проверяет.

13
30.06.2016, 03:17
5 ответов
   -s/--silent
          Silent or quiet mode. Don't show progress meter 
          or error messages.  Makes Curl mute.

Таким образом, Ваш res должен быть похожим

res=`curl -s -I $1 | grep HTTP/1.1 | awk {'print $2'}`

Результат Error 301 on google.com, например.

12
27.01.2020, 19:52
  • 1
    ! этот irratated я так. (и они должны упомянуть это под "метром прогресса" в странице справочника) –   09.12.2011, 15:22

Вы хотите

...
res=$( curl -w %{http_code} -s --output /dev/null $1)
...

Это даст Вам код HTTP_STATUS как единственный вывод.

10
27.01.2020, 19:52

Я сделал бы это как это, чтобы гарантировать, что я перенаправляюсь к заключительному хосту, и получите ответ от него:

res=($(curl -sLI "${1}" | grep '^HTTP/1' | tail -1))
((res[1] == 200)) || echo ${res[2]}
2
27.01.2020, 19:52

Используйте это в качестве условия...

res=`curl -s --head <URL> | head -n 1 | grep -c HTTP/1.1 200 OK`

if [ $res -eq 1 ]
then
MSG = " OKAY"
EXIT_CODE = 0
else
MSG = " NOT OKAY"
EXIT_CODE = 2
fi
2
27.01.2020, 19:52

как указано выше, curl может предоставить http-ответ:

#!/bin/bash
#example1.sh
function test {
  RESPONSE=$(curl -so /dev/null -w "%{http_code}\n" ${1})
  if [[ $RESPONSE != 200 ]]; then
    echo "Error ${RESPONSE} on ${1}"
  fi
}    
test mysite.com
test google.com

Пример 1 с -s мы заглушаем прогресс и -o /dev/null позволяет нам отбросить ответ, но -w здесь ваш союзник:

$ ./example1.sh 
Error 000 on mysite.com
Error 301 on google.com

Это можно еще больше упростить в curl, запросив url_effective и redirect_url:

#!/bin/bash
#example2.sh
function test {
  curl -so /dev/null -w "%{http_code}\t%{url_effective}\t%{redirect_url}\n" ${1}
}  
test mysite.com
test google.com

В примере 2 мы видим наш первоначальный http-ответ, оригинальные запрашиваемые домены и перенаправление, которым ответил сервер:

$ ./example2.sh 
000 HTTP://mysite.com/  
301 HTTP://google.com/  http://www.google.com/

Однако если вы хотите получить ответ 200 даже после 301 или 302 перенаправления:

#!/bin/bash
#example3.sh
function test {
  curl -sLo /dev/null -w "%{http_code}\t%{url_effective}\n" ${1}
}  
test mysite.com
test google.com

В примере 3 мы добавляем -L, который инструктирует curl преследовать редирект(ы):

$ ./example3.sh 
000 HTTP://mysite.com/
200 http://www.google.com/
1
27.01.2020, 19:52

Теги

Похожие вопросы