cURL подавляет реакцию тела

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

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

6 ответов

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

Юникс

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

Windows

curl -s -o nul -v http://google.com

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

Юникс

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

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.


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

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

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/

Просто сделайте запрос HEAD. Вы получите заголовки без тела. Сервер, совместимый со стандартами, должен отправлять сюда точно такую ​​же информацию, как и в запросе GET.

curl --head <url>

Если запрос HEAD не работает для вас по какой-либо причине, это заставит cURL получать и печатать код ответа и заголовки, а затем разрывать соединение, даже не получая тела ответа - в отличие от других ответов, которые получают, а затем отбрасывают его. Это может сэкономить много времени и трафика, особенно если корпус очень большой.

curl --head -X GET <url>

Другой вариант, чтобы показать заголовки ответа и подавить тело:

      curl -sD - https://example.com -o /dev/null

Я бы предложил следующее решение:

      curl -sS -i https://example.com | perl -e '$p = 1; while(<STDIN>){ $p = 0 if $_ =~ /^\s*$/; print if $p }'

Это длинный однострочник, но он делает то, что вам нужно:

  • тело подавлено
  • заголовки и коды ответов выводятся @ stdout, так что вы также можете передать информацию другой команде или записать ее в переменную оболочки, например output="$(curl -i ....)"
  • любые ошибки cURL отправляются @ stderr
  • это работает как для запросов GET, так и для POST, а также для любых других методов HTTP-запроса, и вы можете использовать другой стандарт curl аргументы
Другие вопросы по тегам