Использование curl -v ... , то есть подробного режима, который печатает заголовки ввода и вывода. Тем не менее, эта информация не передается, и я не могу вычеркнуть строки, которые мне не нужны.

Как вы можете отфильтровать вывод заголовка curl?

2 ответа2

1

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

Вы можете сделать это путем объединения параметров -I (drop body), -X«METHOD» (метод переопределения) и -s (без вывода сообщений, сбросить индикаторы выполнения).

curl -sIXGET https://www.google.com/ | grep -vi content-length
  • -s дает команду curl скрывать индикаторы выполнения. Если он опущен и curl обнаруживает, что он работает в терминале, он будет обходить канал и напрямую общаться с терминалом, чтобы показать индикаторы выполнения, которые часто бесполезны и загромождают терминал.
  • -I инструктирую curl отключаться от сервера после получения заголовков вместо ожидания тела. Это полезно, если вы на самом деле, как указано в вашем вопросе, заинтересованы в просмотре только заголовков ответа HTTP. У него также есть побочный эффект, заключающийся в том, что по умолчанию метод запроса имеет значение HEAD как если бы вы указали -XHEAD .
  • -X«method» (например, -XGET) переопределяет метод. Во многих случаях запрос HEAD - это то, что вам нужно, потому что стандарт HTTP гласит, что HEAD должен возвращать точно такие же заголовки, что и тот же GET . Однако при отладке сервера или работе с сервером, который не соответствует стандарту, может быть полезно дать команду curl сделать запрос GET но отключить его перед чтением тела ответа. Таким образом, вы можете увидеть фактические заголовки, которые сервер отправит в ответ на GET вместо того, чтобы надеяться, что сервер реализован правильно.
1

Заголовок, выводимый из curl печатается со стандартной ошибкой. Таким образом, вы должны использовать перенаправление, например, отключая заголовок Content-Length :

curl -v google.com 2>&1 | grep -vi content-length

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .