Как скрыть тело HTML при использовании curl?

Вопрос или проблема

В настоящее время я экспериментирую с флагами curl, изучая, как получить только заголовки ответа, следовать за перенаправлением, если оно есть, используемым шифрованием и аутентификацией, а также временем кругового обхода.

Какой флаг мне следует использовать, чтобы скрыть/отключить HTML-тело в выводе?

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

$ curl -L -D/dev/stdout -o/dev/null -s https://superuser.com
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
X-Request-Guid: a599d44b-705c-4615-a8d8-80c7614bd64f
...
  • -L: следовать за перенаправлениями
  • -D/dev/stdout: выдавать заголовки на стандартный вывод
  • -o/dev/null: отбрасывать тело
  • -s: отключить индикатор прогресса

Как заставить curl отключить HTML-вывод

Используйте флаг -s (для тихой работы) и перенаправьте стандартный вывод (>) в (например) /dev/null (или, если вы на Windows, просто NUL)

Это в сочетании с -D <file> (также известным как --dump-header) может дать вам нужный вывод.

Страница руководства curl содержит больше информации о параметрах командной строки, которые могут быть полезны.

Пример

$ curl -s https://superuser.com -D su.txt > /dev/null
$ less -FX su.txt
HTTP/2 200 
date: Sun, 25 Feb 2018 17:24:30 GMT
content-type: text/html; charset=utf-8
x-frame-options: SAMEORIGIN
x-request-guid: e147da19-7cc9-42cd-8706-4204fd64d4a9
strict-transport-security: max-age=15552000
content-security-policy-report-only: default-src https: wss: data: blob: 'unsafe-eval' 'unsafe-inline'; report-uri https://stackoverflow.report-uri.io/r/default/csp/reportOnly
accept-ranges: bytes
via: 1.1 varnish
x-served-by: cache-lcy19224-LCY
x-cache: MISS
x-cache-hits: 0
x-timer: S1519579470.439587,VS0,VE88
vary: Fastly-SSL
x-dns-prefetch-control: off
set-cookie: prov=d007391b-afc2-4717-282a-287f18827242; domain=.superuser.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
cache-control: private
content-length: 101543

Возможно, вы можете использовать опцию -I, чтобы показывать только информацию о документе.

curl -I www.google.com

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Fri, 22 May 2020 11:21:37 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Fri, 22 May 2020 11:21:37 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2020-05-22-11; expires=Sun, 21-Jun-2020 11:21:37 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=204=ijCC6L4JERmyB5I14nFMLKl91R8H5gD5thzU43L_s0AFuYDaVwmeYy4X3Sc_FHoY24AXdfpXOnpBNZsKTnlX612_tnnafOlsAThO6K3fXfRuyhU_o5_jVL3la6AK_fryMqYL5ErPmPoxX1-dwq-mQimbqUjY69n_JJYEGct5EuU; expires=Sat, 21-Nov-2020 11:21:37 GMT; path=/; domain=.google.com; HttpOnly

Смотрите больше опций curl, введя curl -h в вашем терминале

Ответ или решение

Как скрыть HTML-тело при использовании curl

Если вы хотите использовать curl для получения только заголовков ответа, игнорируя HTML-тело, есть несколько полезных параметров, которые вы можете применить. Ниже описаны необходимые флаги и примеры их использования.

Ключевые флаги curl

  1. -L: Этот флаг позволяет curl следовать редирекциям. Это полезно, если конечный URL перенаправляет вас на другой адрес.
  2. -D: Этот флаг, также известный как --dump-header, указывает curl записать заголовки ответа в указанный файл или на стандартный вывод.
  3. -o: Используйте этот флаг, чтобы указать файл для хранения тела ответа. Если вы хотите просто отбросить его, можно указать /dev/null (для UNIX-систем) или NUL (для Windows).
  4. -s: Флаг "тихого режима" (silent) отключает индикатор прогресса и любые ошибки, что делает вывод более чистым.

Команды

Чтобы скрыть HTML-тело, но сохранить заголовки, команда будет выглядеть следующим образом:

curl -L -D/dev/stdout -o/dev/null -s https://example.com

Разбор команды:

  • -L: Позволяет следовать редирекциям.
  • -D/dev/stdout: Заголовки будут выведены на стандартный вывод (консоль).
  • -o/dev/null: Тело ответа игнорируется и не сохраняется.
  • -s: Отключает информацию о прогрессе.

Пример использования

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

curl -L -D - -o /dev/null -s https://superuser.com

Вывод будет включать только заголовки:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
...

Альтернативные варианты

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

curl -I https://example.com

Пример:

curl -I https://www.google.com

Вывод может выглядеть следующим образом:

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Date: Fri, 22 May 2020 11:21:37 GMT
...

Заключение

Использование curl для получения только заголовков ответа, игнорируя HTML-тело, может быть выполнено с помощью нескольких полезных флагов. Ключевыми из них являются -L, -D, -o и -s. Знание этих параметров поможет вам эффективно управлять запросами и анализировать метаданные, не отвлекаясь на содержимое страниц. Обратите внимание на документацию curl, чтобы узнать больше о других доступных параметрах и возможностях командной строки.

Оцените материал
Добавить комментарий

Капча загружается...