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.
-s -o nul
ale na moim komputerze z systemem Windowscurl -s -o nul -v http://{internal-host}/{internal-uri}
wyświetla cały kod HTML strony - próbowałemcurl -s -o nul -v http://google.com
i blokuje dane wyjściowe zgodnie z oczekiwaniami, więc nie rozumiem, dlaczego to nie działa w mojej wewnętrznej witrynie-o
określa tylko jeden adres URL: jeśli masz wiele adresów URL, odrzuci tylko pierwszy :(NUL
i/dev/null
. Korzystanie-sIXGET
jest lepszą opcją IMO.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:
Aby wyłączyć wyjście, ale nadal wyświetlać błędy, jeśli wystąpią:
Windows
Aby wyłączyć wszystkie dane wyjściowe:
Aby wyłączyć wyjście, ale nadal wyświetlać błędy, jeśli wystąpią:
Wyjaśnienie parametrów
--silent
pomija statystyki pobierania w toku (ale nadal wyświetla dane wyjściowe HTML)--output /dev/null
ukrywa pomyślne wyjście--show-error
pokazuje błędy, nawet gdysilent
włączony jest tryb,--fail
spowoduje 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ć.
źródło
NUL
i/dev/null
. Korzystanie-sIXGET
jest lepszą opcją IMO.curl -vo/dev/null
/curl -voNUL
… i nie wiem, czy istnieje przenośny wariant tego, hrm… ;-).curl -Ssfo /dev/null url
. Ale bądź miły dla przyszłych opiekunów.Jeśli chcesz pokazać nagłówki, ale ukryć treść odpowiedzi, będziesz chciał użyć:
Używałem
curl -I http://somedomain.com/your/url
tylko do pokazywania nagłówków odpowiedzi. Problem z tym polega jednak na tym, że wykonuje żądanie przy użyciuHEAD
metody, która nie jest dobra, gdy chcesz przetestować wywołanie API, które odpowiada tylko naGET
żądanie. Do tego-X GET
służy, zmienia żądanie naGET
.Podsumowując:
-s
ukrywa paski postępu na wyjściu (szczególnie przydatne podczas przesyłania do innego programu)-I
pokazuje nagłówki (ale wysyłaHEAD
żądanie)-XGET
konwertuje żądanie z powrotem naGET
żądaniezobacz: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/
źródło
curl -i
robi dokładnie to samo.-i
zawiera nagłówek HTTP w danych wyjściowych, a także treść. Spróbuj.curl -i http://google.com
to nie to samo, cocurl -IXGET http://google.com
curl -I url
jest 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, coHEAD
robi dobrze.