curl --head http://google.comzrobi to samo co -Iflaga :)
Abel Terefe
9
Uwaga na temat używania --head/ -I: nie wszystkie serwery odpowiadają dokładnie tak samo na HEADżądania (na przykład Content-Encodingbyłyby brakujące, gdybyś próbował sprawdzić, czy treść zostanie zgipowana) i nie wszystkie serwery obsługują HEAD. -vjest zwykle bezpieczniejszym wyborem.
Przeczytaj pytanie - dotyczy nagłówków odpowiedzi, a nie nagłówków zapytań
Graeme Stuart,
56
Ta odpowiedź jest dla mnie przydatna, ponieważ również źle odczytałem pytanie.
Liam
2
To polecenie jest nieco inne w systemie Windows: curl -sD - -o NULL http://example.com
Siergiej Własow
2
@SergeyVlasov W rzeczywistości odpowiednikiem /dev/nullw systemie Windows nulnie jest null.
Francisco Zarabozo,
2
Chociaż pytanie to wymaga nagłówków żądań, Google kieruje wszystkich tutaj, którzy szukają nagłówków odpowiedzi, więc wszyscy cieszymy się, że ta odpowiedź jest tutaj. Ta odpowiedź jest najlepsza do uzyskiwania nagłówków odpowiedzi. Dzięki!!!
biomiker
96
Wierzę, że przełącznik wiersza poleceń, który chcesz przekazać do zwijania, to -I.
Ponadto, jeśli napotkasz kod stanu odpowiedzi HTTP o wartości 301, możesz również przekazać -Lprzełącznik argumentów, aby nakazał curlśledzenie przekierowań adresów URL, i w tym przypadku wydrukuj nagłówki wszystkich stron (w tym przekierowań adresów URL), jak pokazano poniżej :
-IOpcja pokazuje reakcji nagłówków. Pytanie dotyczyło nagłówków żądania .
Asaph,
53
Te -Iopcje przyczyny zwijają się zrobić HTTP HEAD, co mogłoby zmienić odpowiedzi z serwera. -vUważam, że lepiej użyć przełącznika.
acw
1
Jeśli spróbujesz tego z czymkolwiek innym niż HEADprośba (np. -X POST) I otrzymasz komunikat „Możesz wybrać tylko jedno żądanie HTTP!” niż stackoverflow.com/questions/286982/... prawdopodobnie Ci pomoże. Chodzi o to, że -Iwykonuje HEADżądanie, jak acwpodano, a kiedy twoje curlpołączenie zostało skonfigurowane do wykonania innego połączenia, masz dwa żądania HTTP w curlpołączeniu ...
grypa
7
To bardzo zła odpowiedź. (Obiecuję, że jestem tu zazwyczaj bardzo uprzejmy.) 1. Robi to przeciwieństwo tego, o co prosi OP. 2. Używa metody żądania HEADzamiast GETlub POST. 3. NIGDY nie należy go używać do „tylko wyświetlania nagłówków”, chyba że próbujesz zobaczyć, w jaki sposób Twój serwer reaguje inaczej na „a” HEADna „a” GET. Przez większość czasu będzie tak samo, ale nie zawsze. Aby zobaczyć tylko nagłówki, użyj curl -o /dev/null -D /dev/stdout. To da oczekiwane rezultaty w 100% przypadków.
Bruno Bronosky
79
Opcja verbose jest przydatna, ale jeśli chcesz zobaczyć wszystko , co robi curl (w tym przesyłane treści HTTP, a nie tylko nagłówki), sugeruję użycie jednej z poniższych opcji:
Nie sądzę, ponieważ pokazuje nagłówki odpowiedzi i treść!
Pmpr
56
Otrzymujesz ładny wynik w nagłówku za pomocą następującego polecenia:
curl -L -v -s -o /dev/null google.de
-L, --location śledź przekierowania
-v, --verbose większa wydajność wskazuje kierunek
-s, --silent nie pokazuj paska postępu
-o, --output /dev/null nie pokazuj otrzymanego ciała
Lub krótsza wersja:
curl -Lvso /dev/null google.de
Prowadzi do:
*Rebuilt URL to: google.de/*Trying2a00:1450:4008:802::2003...*Connected to google.de (2a00:1450:4008:802::2003) port 80(#0)> GET / HTTP/1.1>Host: google.de
>User-Agent: curl/7.43.0>Accept:*/*>< HTTP/1.1301MovedPermanently<Location: http://www.google.de/<Content-Type: text/html; charset=UTF-8<Date:Fri,12Aug201615:45:36 GMT
<Expires:Sun,11Sep201615:45:36 GMT
<Cache-Control: public, max-age=2592000<Server: gws
<Content-Length:218< X-XSS-Protection:1; mode=block
< X-Frame-Options: SAMEORIGIN
<*Ignoring the response-body
{[218 bytes data]*Connection#0 to host google.de left intact*Issue another request to this URL:'http://www.google.de/'*Trying2a00:1450:4008:800::2003...*Connected to www.google.de (2a00:1450:4008:800::2003) port 80(#1)> GET / HTTP/1.1>Host: www.google.de
>User-Agent: curl/7.43.0>Accept:*/*>< HTTP/1.1200 OK
<Date:Fri,12Aug201615:45:36 GMT
<Expires:-1<Cache-Control: private, max-age=0<Content-Type: text/html; charset=ISO-8859-1< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."<Server: gws
< X-XSS-Protection:1; mode=block
< X-Frame-Options: SAMEORIGIN
<Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat,11-Feb-201715:45:36 GMT; path=/; domain=.google.de;HttpOnly<Accept-Ranges: none
<Vary:Accept-Encoding<Transfer-Encoding: chunked
<{[11080 bytes data]*Connection#1 to host www.google.de left intact
Jak widać, curlzarówno nagłówki wychodzące, jak i przychodzące, pomija dane body, chociaż mówi, jak duże jest ciało.
Dodatkowo dla każdej linii wskazany jest kierunek, aby był łatwy do odczytania. Uważam, że szczególnie przydatne jest śledzenie długich łańcuchów przekierowań.
Podoba mi się to bardziej niż -vopcja z większymi głosami. Również dla zwięzłości może to być curl -Lvso /dev/null <target>tak długo, jak oprzyjdzie koniec.
wrzask
12
Polecenie takie jak poniższe wyświetli trzy sekcje: nagłówki żądania, nagłówki odpowiedzi i dane (oddzielone przez CRLF). Pozwala to uniknąć informacji technicznych i hałasu syntaktycznego dodawanego przez zwijanie.
Sam musiałem rozwiązać ten problem podczas debugowania aplikacji internetowych. -vjest świetne, ale jak na moje gusta trochę za szczegółowe. Oto rozwiązanie (tylko bash), które wymyśliłem:
curl -v http://example.com/ 2> >(sed '/^*/d')
Działa to, ponieważ dane wyjściowe -vsą wysyłane do stderr, a nie do standardowego wyjścia . Przekierowując to do podpowłoki, możemy sedusunąć linie zaczynające się od *. Ponieważ rzeczywiste wyjście nie przechodzi przez podpowłokę, nie ma to wpływu. Korzystanie z podpowłoki jest trochę trudne, ale jest to najprostszy sposób przekierowania stderr na inne polecenie. (Jak zauważyłem, używam tego tylko do testowania, więc działa dla mnie dobrze).
opcja -v dla curl jest zbyt szczegółowa w wyniku błędu, który zawiera wiodące *(linia statusu) lub >(pole nagłówka żądania) lub <(pole nagłówka odpowiedzi). aby uzyskać tylko pole nagłówka żądania:
w celu filtrowania danych -vwyjściowych należy skierować wyjście błędu do terminala, a wyjście standardowe do / dev / null, opcja -s zabrania pomiaru postępu
Jeśli chcesz uzyskać więcej alternatyw, możesz spróbować zainstalować klienta HTTP Modern wiersza poleceń, takiego jak httpie który jest dostępny dla większości systemów operacyjnych z menedżerami pakietów, takimi jak brew, apt-get, pip, yum itp.
np .: - Dla OSX
brew install httpie
Następnie możesz użyć go w wierszu poleceń z różnymi opcjami
curl --head http://google.com
zrobi to samo co-I
flaga :)--head
/-I
: nie wszystkie serwery odpowiadają dokładnie tak samo naHEAD
żądania (na przykładContent-Encoding
byłyby brakujące, gdybyś próbował sprawdzić, czy treść zostanie zgipowana) i nie wszystkie serwery obsługująHEAD
.-v
jest zwykle bezpieczniejszym wyborem.Odpowiedzi:
curl
-v
lub--verbose
opcja pokazuje między innymi nagłówki żądania HTTP. Oto kilka przykładowych danych wyjściowych:źródło
Popularna odpowiedź do wyświetlania nagłówków odpowiedzi , ale OP zapytał o nagłówki żądań .
-s
: Unikaj pokazywania paska postępu-D -
: Zrzuca nagłówki do pliku, ale-
wysyła go do standardowego wyjścia-o /dev/null
: Zignoruj treść odpowiedziJest to lepsze niż
-I
ponieważ nie wysyłaHEAD
żądania, które może dawać różne wyniki.Jest to lepsze niż
-v
dlatego, że nie potrzebujesz tylu hacków, aby je rozwikłać.źródło
curl -sD - -o NULL http://example.com
/dev/null
w systemie Windowsnul
nie jestnull
.Wierzę, że przełącznik wiersza poleceń, który chcesz przekazać do zwijania, to
-I
.Przykładowe użycie:
Ponadto, jeśli napotkasz kod stanu odpowiedzi HTTP o wartości 301, możesz również przekazać
-L
przełącznik argumentów, aby nakazałcurl
śledzenie przekierowań adresów URL, i w tym przypadku wydrukuj nagłówki wszystkich stron (w tym przekierowań adresów URL), jak pokazano poniżej :źródło
-I
Opcja pokazuje reakcji nagłówków. Pytanie dotyczyło nagłówków żądania .-I
opcje przyczyny zwijają się zrobićHTTP HEAD
, co mogłoby zmienić odpowiedzi z serwera.-v
Uważam, że lepiej użyć przełącznika.HEAD
prośba (np.-X POST
) I otrzymasz komunikat „Możesz wybrać tylko jedno żądanie HTTP!” niż stackoverflow.com/questions/286982/... prawdopodobnie Ci pomoże. Chodzi o to, że-I
wykonujeHEAD
żądanie, jakacw
podano, a kiedy twojecurl
połączenie zostało skonfigurowane do wykonania innego połączenia, masz dwa żądania HTTP wcurl
połączeniu ...HEAD
zamiastGET
lubPOST
. 3. NIGDY nie należy go używać do „tylko wyświetlania nagłówków”, chyba że próbujesz zobaczyć, w jaki sposób Twój serwer reaguje inaczej na „a”HEAD
na „a”GET
. Przez większość czasu będzie tak samo, ale nie zawsze. Aby zobaczyć tylko nagłówki, użyjcurl -o /dev/null -D /dev/stdout
. To da oczekiwane rezultaty w 100% przypadków.Opcja verbose jest przydatna, ale jeśli chcesz zobaczyć wszystko , co robi curl (w tym przesyłane treści HTTP, a nie tylko nagłówki), sugeruję użycie jednej z poniższych opcji:
--trace-ascii -
# standardowe--trace-ascii output_file.txt
# plikźródło
Otrzymujesz ładny wynik w nagłówku za pomocą następującego polecenia:
-L, --location
śledź przekierowania-v, --verbose
większa wydajność wskazuje kierunek-s, --silent
nie pokazuj paska postępu-o, --output /dev/null
nie pokazuj otrzymanego ciałaLub krótsza wersja:
Prowadzi do:
Jak widać,
curl
zarówno nagłówki wychodzące, jak i przychodzące, pomija dane body, chociaż mówi, jak duże jest ciało.Dodatkowo dla każdej linii wskazany jest kierunek, aby był łatwy do odczytania. Uważam, że szczególnie przydatne jest śledzenie długich łańcuchów przekierowań.
źródło
-v
opcja z większymi głosami. Również dla zwięzłości może to byćcurl -Lvso /dev/null <target>
tak długo, jako
przyjdzie koniec.Polecenie takie jak poniższe wyświetli trzy sekcje: nagłówki żądania, nagłówki odpowiedzi i dane (oddzielone przez CRLF). Pozwala to uniknąć informacji technicznych i hałasu syntaktycznego dodawanego przez zwijanie.
Polecenie wygeneruje następujące dane wyjściowe:
Opis:
-vs
- dodaj nagłówki (-v), ale usuń pasek postępu (-s)2>&1
- połącz stdout i stderr w jedno stdoutsed
- edytuj odpowiedź wygenerowaną przez curl przy użyciu poniższych poleceń/^* /d
- usuń wiersze zaczynające się od „*” (informacje techniczne)/bytes data]$/d
- usuń wiersze kończące się na „bajty danych]” (informacje techniczne)s/> //
- usuń prefiks „>”s/< //
- usuń prefiks „<”źródło
Sam musiałem rozwiązać ten problem podczas debugowania aplikacji internetowych.
-v
jest świetne, ale jak na moje gusta trochę za szczegółowe. Oto rozwiązanie (tylko bash), które wymyśliłem:Działa to, ponieważ dane wyjściowe
-v
są wysyłane do stderr, a nie do standardowego wyjścia . Przekierowując to do podpowłoki, możemysed
usunąć linie zaczynające się od*
. Ponieważ rzeczywiste wyjście nie przechodzi przez podpowłokę, nie ma to wpływu. Korzystanie z podpowłoki jest trochę trudne, ale jest to najprostszy sposób przekierowania stderr na inne polecenie. (Jak zauważyłem, używam tego tylko do testowania, więc działa dla mnie dobrze).źródło
opcja -v dla curl jest zbyt szczegółowa w wyniku błędu, który zawiera wiodące
*
(linia statusu) lub>
(pole nagłówka żądania) lub<
(pole nagłówka odpowiedzi). aby uzyskać tylko pole nagłówka żądania:aby uzyskać tylko pole nagłówka żądania:
lub zrzucić go do
/tmp/test.txt
pliku z opcją -Dw celu filtrowania danych
-v
wyjściowych należy skierować wyjście błędu do terminala, a wyjście standardowe do / dev / null, opcja -s zabrania pomiaru postępuźródło
Jeśli chcesz uzyskać więcej alternatyw, możesz spróbować zainstalować klienta HTTP Modern wiersza poleceń, takiego jak httpie który jest dostępny dla większości systemów operacyjnych z menedżerami pakietów, takimi jak brew, apt-get, pip, yum itp.
np .: - Dla OSX
Następnie możesz użyć go w wierszu poleceń z różnymi opcjami
źródło