Получение curl для вывода кода состояния HTTP?

Я использую curl в командной строке Linux для выдачи HTTP-запросов. Органы реагирования печатаются на стандартную версию, что хорошо, но я не вижу на странице руководства, как получить завиток, чтобы напечатать код состояния HTTP из ответа (404, 403 и т. Д.). Это возможно?

Это должно работать для вас, если веб-сервер может отвечать на запросы HEAD (это не будет выполнять GET ):

 curl -I http://www.example.org 

В качестве дополнения, чтобы cURL выполнял переадресацию (статусы 3xx) add -L.

Более конкретный способ распечатать только код состояния HTTP – это что-то вроде:

 curl -s -o /dev/null -w "%{http_code}" http://www.example.org/ 

Намного проще работать с скриптами, так как это не требует никакого синтаксического анализа 🙂

Параметр -I может быть добавлен для повышения производительности отклика. Этот параметр просто запрашивает статус / заголовки ответа, без тела ответа загрузки. (% {Http_code} возвращает первую строку полезной нагрузки HTTP)

то есть:

 curl -s -o /dev/null -I -w "%{http_code}" http://www.example.org/ 

Если вы хотите увидеть заголовок, а также результат, вы можете использовать подробный вариант:

 curl -v http://www.example.org curl --verbose http://www.example.org 

Состояние появится в заголовке. Например

 < Date: Tue, 04 Nov 2014 19:12:59 GMT < Content-Type: application/json; charset=utf-8 < Status: 422 Unprocessable Entity 

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

 curl -i http://example.org 

Хорошая вещь о -i заключается в том, что она работает с -X POST .

Если вы хотите захватить код состояния HTTP в переменной, но все же перенаправить контент в STDOUT, вы должны создать два STDOUT. Вы можете сделать это с заменой процесса> () и подстановкой команд $ () .

Во-первых, создайте дескриптор файла 3 для вашего текущего процесса «STDOUT с exec 3>&1 .

Затем используйте опцию -o curl, чтобы перенаправить ответный контент на временный fifo с помощью подстановки команд, а затем в пределах этой подстановки команды перенаправить вывод обратно в ваш текущий дескриптор файла STDOUT процесса с помощью -o >(cat >&3) .

Объединяя все это:

 #creates a new file descriptor 3 that redirects to 1 (STDOUT) exec 3>&1 # Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS # and sending the content to this command's STDOUT with -o >(cat >&3) HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com') 

Переопределить выкручивание:

 curl -sw '%{http_code}' http://example.org 

Может использоваться с любым типом запроса.

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

Он содержит код ответа

 curl -I http://example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2 

Для запроса POST работало:

 curl -w 'RESP_CODE:%{response_code}' -s -X POST --data '{"asda":"asd"}' http://example.com --header "Content-Type:application/json"|grep -o 'RESP_CODE:[1-4][0-9][0-9]' 

Это болезненное ограничение на curl --fail . От man curl :

-f, –fail (HTTP) Сбой (без вывода вообще) без ошибок на сервере

Но нет способа получить как ненулевой код возврата, так и тело ответа в stdout.

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

 curl_with_error_code () { _curl_with_error_code "$@" | sed '$d' } _curl_with_error_code () { local curl_error_code http_code exec 17>&1 http_code=$(curl --write-out '\n%{http_code}\n' "$@" | tee /dev/fd/17 | tail -n 1) curl_error_code=$? exec 17>&- if [ $curl_error_code -ne 0 ]; then return $curl_error_code fi if [ $http_code -ge 400 ] && [ $http_code -lt 600 ]; then echo "HTTP $http_code" >&2 return 127 fi } 

Эта функция ведет себя точно как curl , но вернет 127 (код возврата, не используемый curl ) в случае HTTP-кода в диапазоне [400, 600 [.

Только код состояния

 [0]$ curl -LI http://www.example.org -o /dev/null -w '%{http_code}\n' -s [0]$ 200 

Нашел его на этом GIST

 curl -swo -i /dev/null -w "%{http_code}" http://www.any_example.com 

Это вернет следующую информацию:

  1. Данные ответа, если какие-либо данные возвращаются API как ошибка
  2. Код состояния

Используйте следующую команду cURL и подключите ее к grep следующим образом:

$ Curl -I -s -L http://example.com/v3/get_list | Grep "HTTP / 1.1"

Вот что делает каждый флаг:

  • -I : показывать только заголовки ответов
  • -s : Silent – не показывать индикатор выполнения
  • -L : Следовать за Location: заголовки

Вот ссылка на коды состояния HTTP .

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

Вот некоторая команда curl, которая использует GET и возвращает код HTTP.

 curl -so /dev/null -w '%{response_code}' http://www.example.org 

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

  curl -I http://www.example.org 
  • Разбиение HTTP-запроса на несколько байтовых запросов
  • Что такое «область» в базовой аутентификации
  • Чтение файлов cookie через HTTPS, которые были установлены с использованием HTTP
  • 400 BAD запрос Значение кода ошибки HTTP?
  • Простой пример использования HTTP POST и использование ответа
  • Как работать с доменами cookie браузера?
  • Могу ли я использовать символ (@) внутри URL?
  • Изменение HTTP_ACCEPT_LANGUAGE
  • Как ограничить скорость передачи данных в сети Windows?
  • Есть ли недостаток в использовании ведущего двойного слэша для наследования протокола в URL? т.е. src = "// domain.com"
  • Как работает загрузка HTTP-файлов?
  • Interesting Posts

    Бесплатный инструмент для проверки исходного кода C / C ++ на основе набора стандартов кодирования?

    Эффект тени для текста в Android?

    Ошибка HTTP OPTIONS в Codeigniter от RedSturgeon Restserver и Backbone.js

    Возможно ли открыть современные приложения пользовательского интерфейса на втором дисплее?

    Java SSL: как отключить проверку имени хоста

    XPath и XSLT 2.0 для .NET?

    Android настроил Volley для использования в кеше

    Как развернуть SQL Server Compact Edition 4.0?

    Почему некорректная попытка пароля занимает намного больше времени, чем правильная?

    Можно ли отключить USB-накопитель, если в Windows 8 приостановлено копирование?

    Чтение из System.in – Java

    Как отформатировать продолжительность в java? (например, формат H: MM: SS)

    Подтверждения IPN PayPal IPN с использованием процедур SSL: SSL3_READ_BYTES: сбой вызова подтверждения sslv3

    Android – сохранение или удаление файлов, созданных приложением при удалении

    Изучение WebGL и three.js

    Давайте будем гением компьютера.