cURL pomija treść odpowiedzi

112

Czy można poinstruować cURL, aby blokował wyjście treści odpowiedzi?

W moim przypadku treść odpowiedzi to strona HTML, która przepełnia bufor CLI, co utrudnia znalezienie odpowiednich informacji. Chcę zbadać inne części danych wyjściowych, takie jak kod odpowiedzi HTTP, nagłówki itp. - wszystko z wyjątkiem samego HTML.

BaltoStar
źródło

Odpowiedzi:

118

Możesz użyć -oprzełącznika i nullpseudo-pliku:

Unix

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

Windows

curl -s -o nul -v http://google.com
Gilles Quenot
źródło
1
... jeśli korzystasz z systemu Unix ;-) W przypadku systemu Windows możesz użyć nul. Oto link do dokumentacji, być może BaltoStar czuje potrzebę przeczytania przed następnym zapytaniem ;-) curl.haxx.se/docs/manpage.html
Marged
3
Zapraszamy. Ale to jest „nul”, „null” utworzy plik o tej nazwie
Marged
1
w rzeczywistości przeczytałem stronę podręcznika przed wysłaniem i wypróbowałem, -s -o nulale na moim komputerze z systemem Windows curl -s -o nul -v http://{internal-host}/{internal-uri}wyświetla cały kod HTML strony - próbowałem curl -s -o nul -v http://google.comi blokuje dane wyjściowe zgodnie z oczekiwaniami, więc nie rozumiem, dlaczego to nie działa w mojej wewnętrznej witrynie
BaltoStar
-ookreśla tylko jeden adres URL: jeśli masz wiele adresów URL, odrzuci tylko pierwszy :(
Simon Buchan
1
Opiera się na nieprzenośnych NULi /dev/null. Korzystanie -sIXGETjest lepszą opcją IMO.
binki
46

Oto sposób na pominięcie wszystkich danych wyjściowych i nagłówków curl, z możliwością wyświetlania błędów, jeśli się pojawią. Przydatne do zadań cron lub testów automatycznych.

Unix

Aby wyłączyć wszystkie dane wyjściowe:

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

Aby wyłączyć wyjście, ale nadal wyświetlać błędy, jeśli wystąpią:

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

Windows

Aby wyłączyć wszystkie dane wyjściowe:

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

Aby wyłączyć wyjście, ale nadal wyświetlać błędy, jeśli wystąpią:

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

Wyjaśnienie parametrów

--silentpomija statystyki pobierania w toku (ale nadal wyświetla dane wyjściowe HTML)
--output /dev/nullukrywa pomyślne wyjście
--show-errorpokazuje błędy, nawet gdy silentwłączony jest tryb,
--failspowoduje zgłoszenie błędu, jeśli odpowiedź HTTP jest kodem błędu (404, 500 itp.) zamiast zwykłego DNS / Błędy TCP.


AKTUALIZACJA: Zdaję sobie sprawę, że pierwotny autor chciał sprawdzić nagłówki i kod odpowiedzi żądania, zamiast wyciszać wszystko . Zobacz odpowiedź Samaela, aby dowiedzieć się, jak to zrobić.

Simon East
źródło
2
Opiera się na nieprzenośnych NULi /dev/null. Korzystanie -sIXGETjest lepszą opcją IMO.
binki
1
Dzięki za komentarz @binki - faktycznie robią różne rzeczy. Zrozumiałem również, że OP chciał sprawdzić nagłówki, które nie pojawiają się w moim rozwiązaniu. Zaktualizowałem odpowiedź, aby to odzwierciedlić.
Simon East
1
Chyba w rereading POST OP oni nie mówią, że tylko chciał zobaczyć nagłówki. Właściwie mogli szukać curl -vo/dev/null/ curl -voNUL… i nie wiem, czy istnieje przenośny wariant tego, hrm… ;-).
binki
Czy istnieje krótkie polecenie - niepowodzenie? Myślę, że -sS jest tym, czego potrzebujemy zarówno do --silent, jak i --show-error
Freedo
Tak, jest: curl -Ssfo /dev/null url. Ale bądź miły dla przyszłych opiekunów.
Amit Naidu
29

Jeśli chcesz pokazać nagłówki, ale ukryć treść odpowiedzi, będziesz chciał użyć:

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

Używałem curl -I http://somedomain.com/your/urltylko do pokazywania nagłówków odpowiedzi. Problem z tym polega jednak na tym, że wykonuje żądanie przy użyciu HEADmetody, która nie jest dobra, gdy chcesz przetestować wywołanie API, które odpowiada tylko na GETżądanie. Do tego -X GETsłuży, zmienia żądanie na GET.

Podsumowując:

-sukrywa paski postępu na wyjściu (szczególnie przydatne podczas przesyłania do innego programu)
-Ipokazuje nagłówki (ale wysyła HEADżądanie)
-XGETkonwertuje żądanie z powrotem na GETżądanie

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

samael
źródło
2
To naprawdę skomplikowane; curl -irobi dokładnie to samo.
bfontaine,
4
nie, -izawiera nagłówek HTTP w danych wyjściowych, a także treść. Spróbuj. curl -i http://google.comto nie to samo, cocurl -IXGET http://google.com
samael
Do moich celów (i PO) curl -I urljest wystarczające i ma ten sam efekt. Musiałem tylko sprawdzić, czy adres URL odpowiada. Również to pytanie dotyczyło jedynie tłumienia ciała, co HEADrobi dobrze.
Amit Naidu