Я использую curl
в командной строке в Linux для выдачи HTTP-запросов. Тела ответа печатаются в стандартном формате, и это нормально, но я не вижу на странице руководства, как заставить curl печатать код состояния HTTP из ответа (404, 403 и т. Д.). Это возможно?
799
-i
Флаг, какcurl -i https://www.example.com/
, вероятно , что вы хотите, согласно superuser.com/a/514798/190188curl -IL http://www.example.com | grep "^HTTP\/"
?Ответы:
Это должно работать для вас, если веб-сервер может отвечать на запросы HEAD (это не будет выполнять a
GET
):Кроме того, чтобы позволить cURL следовать перенаправлениям (статусы 3xx), добавьте -L.
источник
curl -I
выполняет HTTP-запрос HEAD, который может быть проблематичным для тестирования кода состояния HTTP для некоторых серверов и служб веб-приложенийhead -n 1|cut -d$' ' -f2
curl -I http://www.example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2
. Добавьте -L в curl, если вам нужен окончательный статус после перенаправления.curl -I -X GET
отправит запрос GET, но даст тот же результат.Более конкретный способ распечатать только код состояния HTTP - это что-то вроде:
Намного проще работать в скриптах, так как это не требует синтаксического анализа :-)
Параметр
-I
может быть добавлен для улучшения производительности ответной нагрузки. Этот параметр просто запрашивает статус / заголовки ответа, без загрузки тела ответа.Примечание:
%{http_code}
возвращается в первую строку полезной нагрузки HTTPто есть:
источник
/dev/null
штука работает даже в Windows-версии curl, которую я использую.httping -c 1 -s -G -m
выдает GET и не загружает весь файл, хотя я понимаю, что этот вопрос специально о curl.-s
= не показывать ход загрузки,-o /dev/null
= не отображать тело,-w "%{http_code}"
= записывать код ответа http в стандартный вывод после выхода.Если вы хотите увидеть заголовок и результат, вы можете использовать подробную опцию:
Статус появится в шапке. Например
источник
Вы можете напечатать код состояния в дополнение ко всем заголовкам, выполнив следующие действия:
Хорошая вещь о
-i
том, что это работает с-X POST
.источник
-i
работает с любым методом HTTP, не толькоGET
иPOST
... :)-s
(не показывать индикатор прогресса или сообщения об ошибках) и-S
(показывать сообщения об ошибках в конце концов)Если вы хотите записать код состояния HTTP в переменную, но по-прежнему перенаправлять содержимое в STDOUT, необходимо создать два STDOUT. Вы можете сделать это с подстановкой процесса> () и подстановкой команды $ () .
Сначала создайте файловый дескриптор
3
для текущего процесса 'STDOUT сexec 3>&1
.Затем используйте параметр curl,
-o
чтобы перенаправить содержимое ответа во временный fifo с помощью подстановки команд, а затем в рамках этой подстановки команд перенаправить вывод обратно в дескриптор файла текущего процесса STDOUT3
с помощью-o >(cat >&3)
.Собираем все вместе в
bash
3.2.57(1)-release
(стандарт дляmacOS
):Обратите внимание, что это не работает,
/bin/sh
как SamK отметил в комментариях ниже .источник
STDOUT
, так что вы должны иметь возможность перенаправить вывод из команды куда угодно, как обычная команда. Я не проверял это все же.Переопределить вывод curl:
Может использоваться с любым типом запроса.
источник
ТОЛЬКО код состояния
Все заслуги в этом GIST
источник
Это болезненное
curl --fail
ограничение. Отman curl
:Но нет способа получить и ненулевой код возврата, и тело ответа в stdout.
Основываясь на ответе pvandenberk и этом другом очень полезном трюке, изученном на SO , вот обходной путь:
Эта функция ведет себя точно так же
curl
, но вернет 127 (код возврата не используетсяcurl
) в случае HTTP-кода в диапазоне [400, 600 [.источник
Это отправит запрос на URL, получит только первую строку ответа, разделит его на блоки и выберет вторую.
Содержит код ответа
источник
Для запроса POST сработало следующее:
источник
Используйте следующую команду cURL и передайте ее в grep следующим образом:
Вот что делает каждый флаг:
-I
: Показать только заголовки ответа-s
: Silent - не показывать индикатор выполнения-L
: СледуйтеLocation:
заголовкамВот ссылка на коды состояния HTTP .
Запустите из командной строки. Этот curl работает в режиме без вывода сообщений, следует за любыми перенаправлениями, получает заголовки HTTP. grep выведет код состояния HTTP на стандартный вывод.
источник
Это вернет следующую информацию:
источник
Вот некоторая команда curl, которая использует
GET
и возвращает код HTTP.Пожалуйста, помните, что используется приведенный ниже подход
HEAD
, который работает быстрее, но он может не работать с некоторыми менее веб-HTTP-серверами.источник
Пример использования кодов ответов. Я использую это для повторной загрузки баз Geolite, только если они изменились (
-z
), а также после перенаправлений (-L
):источник
ОП хочет знать код статуса. Часто при загрузке файла вы также хотите почувствовать его размер, поэтому я сначала использую curl, чтобы показать код состояния и размер файла, а затем отключить подробный и направить файл в нужное место и имя:
Потом жду финиша скручивания
перед тем, как запустить следующую команду. Выше, когда используется в сценарии многих команд, как выше, дает хороший ответ, как:
Обратите внимание, что -o в curl должен сопровождаться полным путем файла + именем файла. Таким образом, это позволяет вам сохранять файлы с разумной структурой имен, когда вы добавляете их с помощью curl. Также обратите внимание, что -s и -S, используемые вместе, отключают вывод, но показывают ошибки. Также обратите внимание, что -R пытается установить временную метку файла для веб-файла.
Мой ответ основан на том, что первоначально предложил @pvandenberk, но кроме того, он фактически сохраняет файл где-то, а не просто указывает на / dev / null.
источник
Разделить выводимое содержимое на
stdout
и код состояния HTTP наstderr
:Если для stderr требуется только HTTP-код состояния,
--silent
можно использовать:Затем можно выбрать нужный поток, перенаправив нежелательный поток на
/dev/null
:Обратите внимание, что для второго перенаправления нужно вести себя как нужно, нам нужно запустить команду curl в subshell.
источник
bash
для процесса замены./tmp/out
/tmp/err
файлы могут привести к неожиданным результатам при параллельной работе.