cURL придушити відповідь органу


110

Чи можна доручити CURL придушити вихід відповіді?

У моєму випадку органом відповіді є HTML-сторінка, яка переповнює буфер CLI, що ускладнює пошук відповідної інформації. Я хочу вивчити інші частини виводу, такі як код відповіді HTTP, заголовки тощо - все, крім власне HTML.

Відповіді:


117

Ви можете використовувати -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
15:15

3
Будь ласка. Але це "nul", "null" створить файл з таким ім'ям
Marged

1
насправді я прочитав сторінку man перед публікацією і спробував, -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-адрес, він буде відкинути лише перший :(
Simon Buchan

1
Покладається на портативні NULта /dev/null. Використання -sIXGET- кращий варіант ІМО.
бінкі

45

Ось спосіб придушити всі результати витоку та заголовки, з можливістю все-таки відображати помилки, якщо вони виникають. Корисно для завдань на крон або автоматизованого тестування.

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- кращий варіант ІМО.
бінкі

1
Дякую за коментар @binki - вони насправді роблять різні речі. Також зрозумів, що ОП хоче перевірити заголовки, які не відображаються в моєму рішенні. Я оновив свою відповідь, щоб це відобразити.
Саймон Іст

1
Я думаю , перечитуючи пост Ора в них не говорить , що вони тільки хотіли бачити заголовки. Вони, можливо, шукали curl -vo/dev/null/ curl -voNUL… і я не знаю, чи є портативний варіант цього, хрм… ;-).
binki

Чи є коротка команда для --fail? Я думаю, -sS - це те, що нам потрібно і для --silent і
show

Так, є: 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, для чого це, воно змінює запит на a GET.

Отже, підсумовуючи:

-sприховує смуги прогресу від виводу (особливо корисно при переході до іншої програми)
-Iпоказує заголовки (але робить HEADзапит)
-XGETперетворює запит назад у GETзапит

див .: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/


2
Це справді складно; curl -iробить точно те саме.
bfontaine

4
ні, -iвключає HTTP-заголовок у висновку, а також тіло. Спробуй це. curl -i http://google.comне те саме, щоcurl -IXGET http://google.com
самаель

Для моїх цілей (і ОП) curl -I urlдостатньо і має той же ефект. Мені просто потрібно було перевірити, чи реагує URL-адреса. Це питання теж стосувалося придушення організму, що HEADдобре.
Аміт Найду
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.