cURL подавить тело ответа

112

Можно ли указать cURL подавить вывод тела ответа?

В моем случае тело ответа - это HTML-страница, которая переполняет буфер CLI, что затрудняет поиск соответствующей информации. Я хочу изучить другие части вывода, такие как код ответа HTTP, заголовки и т. Д. - все, кроме фактического HTML.

BaltoStar
источник

Ответы:

118

Вы можете использовать -oпереключатель и nullпсевдо-файл:

Unix

curl -s -o /dev/null -v http://google.com

Windows

curl -s -o nul -v http://google.com
Жиль Кено
источник
1
... если вы используете Unix ;-) Для Windows вы можете использовать nul. Вот ссылка на документы, возможно , BaltoStar чувствует желание читать , прежде чем спрашивать в следующий раз ;-) curl.haxx.se/docs/manpage.html
Marged
3
Добро пожаловать. Но это "нуль", "нуль" создаст файл с таким именем
маржа
1
на самом деле я прочитал страницу руководства перед публикацией и попробовал, -s -o nulно на моем компьютере с Windows выводится curl -s -o nul -v http://{internal-host}/{internal-uri}весь html страницы - я пытался, curl -s -o nul -v http://google.comи он подавляет вывод, как ожидалось, поэтому я не понимаю, почему это не работает для моего внутреннего сайта
BaltoStar
-oуказывает только один вывод URL: если у вас несколько URL, будет
Саймон Бьюкен
1
Полагается на непереносимые NULи /dev/null. Использование -sIXGET- лучший вариант ИМО.
binki
46

Вот способ подавить весь вывод curl и заголовки с возможностью отображения ошибок в случае их возникновения. Полезно для задач cron или автоматического тестирования.

Unix

Чтобы подавить весь вывод:

curl --silent --output /dev/null http://example.com

Чтобы подавить вывод, но по-прежнему отображать ошибки, если они возникают:

curl --silent --output /dev/null --show-error --fail http://example.com

Windows

Чтобы подавить весь вывод:

curl --silent --output nul http://example.com

Чтобы подавить вывод, но по-прежнему отображать ошибки, если они возникают:

curl --silent --output nul --show-error --fail http://example.com

Объяснение параметров

--silentподавляет статистику незавершенной загрузки (но по-прежнему отображает вывод HTML)
--output /dev/nullскрывает успешный вывод
--show-errorпоказывает ошибки, даже если silentрежим включен
--fail, вызовет ошибку, если ответ HTTP представляет собой код ошибки (404, 500 и т. д.), а не просто DNS / Ошибки TCP.


ОБНОВЛЕНИЕ: я понимаю, что первоначальный автор хотел проверить заголовки и код ответа на запрос, а не все заглушать . См . Ответ Самаэля, чтобы узнать, как это сделать.

Саймон Ист
источник
2
Полагается на непереносимые NULи /dev/null. Использование -sIXGET- лучший вариант ИМО.
binki
1
Спасибо за комментарий @binki - на самом деле они делают разные вещи. Также понял, что OP хотел проверить заголовки, которые не отображаются в моем решении. Я обновил свой ответ, чтобы отразить это.
Саймон Ист
1
Я думаю , перечитывая пост Ора в них не говорит , что они только хотели видеть заголовки. Возможно, они действительно искали curl -vo/dev/null/ curl -voNUL… и я не знаю, есть ли его переносимый вариант, хм… ;-).
binki
Есть ли короткая команда для --fail? Я думаю, -sS - это то, что нам нужно как для --silent, так и для --show-error
Freedo
Да, есть: curl -Ssfo /dev/null url. Но будьте добры к будущим сопровождающим.
Амит Найду,
29

Если вы хотите показать заголовки, но скрыть тело ответа, вы захотите использовать:

curl -sIXGET http://somedomain.com/your/url

Я использовал curl -I http://somedomain.com/your/urlтолько для отображения заголовков ответов. Проблема в том, что он делает запрос с использованием HEADметода, который не подходит, если вы хотите протестировать вызов API, который отвечает только на GETзапрос. Это то, -X GETдля чего он меняет запрос на GET.

Итак, в итоге:

-sскрывает индикаторы выполнения из вывода (особенно полезно при подключении к другой программе)
-Iпоказывает заголовки (но делает HEADзапрос)
-XGETпреобразует запрос обратно в GETзапрос

см .: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

Самаэль
источник
2
Это действительно сложно; curl -iделает то же самое.
bfontaine 07
4
нет, -iвключает HTTP-заголовок в вывод, а также тело. Попытайся. curl -i http://google.comне то же самое, чтоcurl -IXGET http://google.com
samael 07
Для моих целей (и OP) curl -I urlдостаточно и имеет тот же эффект. Мне просто нужно было проверить, реагирует ли URL-адрес. Этот вопрос тоже был просто о подавлении тела, что HEADхорошо.
Амит Найду,