Я использую curl для получения заголовков http, чтобы найти код статуса http, а также вернуть ответ. Я получаю заголовки http с помощью команды
curl -I http://localhost
Чтобы получить ответ, я использую команду
curl http://localhost
Как только я использую флаг -I, я получаю только заголовки, а ответа больше нет. Есть ли способ получить как ответ http, так и код состояния заголовков / http в одной команде?
Ответы:
Я смог найти решение, посмотрев на документ curl, в котором указано, что нужно использовать
-
для вывода, чтобы получить вывод на стандартный вывод.Чтобы получить ответ только с кодом возврата http, я мог бы просто сделать
источник
-i
. Или, возможно-v
, вам нужна дополнительная информация.-o -I
заканчивается созданием файла с буквальным названием '-I
' в CWD. Кто-нибудь еще это видит? Решение для этого-o/dev/null -I
подробный режим вам все расскажет
источник
Я использую эту команду для печати кода состояния без каких-либо других выходных данных. Кроме того, он будет выполнять только запрос HEAD и следовать перенаправлению (соответственно
-I
и-L
).Это позволяет очень легко проверить код состояния в сценарии работоспособности:
источник
curl -o -I -L -s -w "%{http_code}" http://localhost
создается файл с именем-I
, чтобы обойти это, я добавил место для вывода файла, подразумеваемого-o
to go, а именно/dev/null
:curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
Я нашел этот вопрос, потому что мне нужен ОБА ответ и контент, чтобы добавить некоторую обработку ошибок для пользователя.
Вы можете распечатать код состояния HTTP на стандартный вывод и записать содержимое в другой файл.
Это позволяет вам использовать логику, чтобы решить, стоит ли обрабатывать ответ.
источник
-i
Вариантом является тот , который вы хотите:В качестве альтернативы вы можете использовать подробный вариант:
источник
Я использовал это:
Чтобы получить статус HTTP
Чтобы получить тело ответа, я использовал это
источник
Эта команда
получит тело и статус, разделенные запятыми; вы можете разделить их, чтобы вытащить.
Вы можете изменить разделитель по своему усмотрению.
источник
Для программного использования я использую следующее:
Он показывает следующий вывод:
источник
Это способ получить тело «И» с кодом состояния и отформатировать его в правильный json или любой другой формат, который вам подходит. Кто-то может возразить, что это неправильное использование параметра формата записи, но это работает для меня, когда мне нужен как основной код, так и код состояния в моих сценариях, чтобы проверить код состояния и передать ответы с сервера.
запустите приведенный выше код, и вы должны получить обратно json в этом формате:
с параметром -w write format, поскольку сначала печатается stderr, вы можете отформатировать вывод с помощью var http_code и поместить тело ответа в значение (body), а затем выполнить включение с помощью var stdout. Затем перенаправьте свой вывод stderr на stdout, и вы сможете объединить как http_code, так и тело ответа в аккуратный вывод
источник
curl: unknown --write-out variable: 'stderr'
curl: unknown --write-out variable: 'stdout'
Мой способ добиться этого :
Чтобы получить и то, и другое (заголовок и тело), я обычно выполняю следующее
curl -D- <url>
:Это сбрасывает headers (
-D
) в stdout (-
) (ищите--dump-header
в man curl ).ИМХО тоже очень удобно в этом контексте:
Я часто использую jq для форматирования данных json (например, из некоторых остальных API). Но поскольку jq не ожидает HTTP-заголовка, хитрость заключается в том, чтобы напечатать заголовки в stderr, используя
-D/dev/stderr
. Обратите внимание, что на этот раз мы также используем-sS
(--silent, --show-errors) для подавления индикатора выполнения (потому что мы пишем в канал).Я думаю, это также может быть удобно, если вы хотите распечатать заголовки (для быстрой проверки) на консоли, но перенаправить тело в файл (например, когда это какой-то двоичный файл, чтобы не испортить ваш терминал):
Имейте в виду: это НЕ то же самое, что
curl -I <url>
! As-I
будет выполнятьHEAD
запрос, а неGET
запрос (ищите--head
в man curl . Да: для большинства HTTP-серверов это даст тот же результат. Но я знаю множество бизнес-приложений, которые вообще не реализуютHEAD
запросы ;-Pисточник
Добавьте строку «http_code: 200» в конце, а затем используйте grep для ключевого слова «http_code:» и извлеките код ответа.
В этом случае вы все равно можете использовать немой режим / подробный режим, чтобы получить дополнительную информацию о запросе, например о теле ответа curl.
источник
источник