Myślę, że curl -vjest najłatwiejszy. Wypluje nagłówki żądań (wiersze poprzedzone „>”) bez konieczności zapisywania do pliku:
$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
* Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...
@PiotrekDe -D -był schludny, ale nie był dla mnie przydatny, ponieważ po prostu zduplikował -vjuż wyświetlone nagłówki . Jeśli chcesz, aby nie były one prefiksowane do automatycznego użycia przez maszynę, być może byłoby lepiej w tym przypadku, ale chciałem tylko rzucić okiem na to, jaki problem był bardziej szczegółowo.
Pysis
1
Istnieją dwie bardzo pomocne funkcje flagi „verbose”: po pierwsze, drukuje również proces uzgadniania TLS podczas uzyskiwania dostępu do strony internetowej za pośrednictwem HTTPS, takie jak curl -v https://www.example.com; po drugie, drukuje również CONNECTżądanie, jeśli odwiedzasz witrynę za pośrednictwem serwera proxy HTTP , takiego jak curl --proxy my-proxy:8080 http://www.example.com. Uważam, że pomogłoby to większej liczbie użytkowników, gdyby niektóre przykłady tych dwóch funkcji zostały wymienione w tej odpowiedzi.
Franklin Yu
1
TL; DR: Nie używaj -I We współczesnym świecie, kiedy ludzie pytają o wyświetlanie nagłówków, prawdopodobnie mówią o interfejsach API. A jeśli użyjesz tej -Imentalności „Używam do wyświetlania nagłówków z moim serwerem Apache”, zmarnujesz dużo czasu na rozwijanie się przeciwko HEADmetodzie, którą prawdopodobnie zamierzasz użyć GET. Przestań mówić ludziom, żeby ich używali -I. Jeśli chcą HEAD, użyj -X HEAD(TWSS)
Bruno Bronosky
141
Pytanie nie określało, czy curlchodziło o nazwane polecenie wiersza poleceń , czy całą bibliotekę cURL.
Poniższy kod PHP wykorzystujący bibliotekę cURL używa pierwszego parametru jako metody HTTP (np. „GET”, „POST”, „OPCJE”), a drugiego parametru jako adresu URL.
To najlepsza odpowiedź, ponieważ plik użyty w tej metodzie zawiera wszystko w curl_getinfo (), do którego odwołuje się poniżej, a także więcej szczegółów na temat zarówno żądania, jak i odpowiedzi.
Mike_K
3
Możesz użyć CURLOPT_WRITEHEADER jako informacji nagłówka i CURLOPT_FILE dla całego transferu
sturrockad
1
Należy pamiętać, że jeśli połączenie zostanie odrzucone, pliki określone za pomocą CURLOPT_WRITEHEADER i CURLOPT_FILEsą puste.
wyjechał
34
Kto powiedział coś o używaniuphp?
Eddie B
1
Poprosiłem o odpowiedź, ponieważ chociaż pytanie nie było związane z php, odpowiedź oparta na php wskazała mi właściwy kierunek rozwiązania mojego problemu z wysłaniem tokena na okaziciela. Dziękuję Ci. Podałem swój powód tutaj tylko na próżną próbę wyświetlenia tego pytania w przyszłych wyszukiwaniach Google dla programistów php z podobnym problemem.
Chris
49
Jedynym sposobem, w jaki udało mi się zobaczyć moje wychodzące nagłówki (curl z php), było użycie następujących opcji:
tworzy plik, curl.tracektóry zaczyna się w następujący sposób:
== Info: About to connect() to www.google.com port 80 (#0)
== Info: Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050: OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f:
Otrzymał również odpowiedź (odpowiedź 302, a dokładniej, ale nieistotna), która została zarejestrowana.
Jeśli chcesz tylko zapisać nagłówki odpowiedzi , użyj --dump-headeropcji:
curl -D file url
curl --dump-header file url
Jeśli potrzebujesz więcej informacji o dostępnych opcjach, użyj curl --help | less(daje kilkaset wierszy wyników, ale wspomina o wielu opcjach). Lub znajdź stronę podręcznika, na której znajduje się więcej wyjaśnień na temat opcji.
To bardzo szczegółowe, ale z pewnością pokazuje wszystko, co powinieneś wiedzieć.
tripleee
26
Próbowałem tutaj odpowiedzi i okazało się, że najbardziej użyteczna i najłatwiejsza nie jest jeszcze wymieniona jako odpowiedź, ale jest to:
curl -v https://example.com/path
Spowoduje to wydrukowanie nagłówków ZAPYTAŃ, a także nagłówków RESPONSE oraz innych przydatnych, takich jak certyfikat SSL i informacja, czy istniejące połączenie TCP zostało ponownie użyte. -vznacznik może być połączony z innymi flagi, oczywiście, na przykład do przekierowania śledzenia i szybka autoryzacja HTTP:
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.
Wiem, że to trochę za późno, ale moją ulubioną metodą jest to netcat, że dostajesz dokładnie to, co curlwysłano; może to różnić się od opcji --tracelub, --trace-asciiktóre nie będą poprawnie wyświetlać znaków spoza ASCII (wyświetlają się tylko jako kropki lub wymagają dekodowania).
Możesz to zrobić równie łatwo, otwierając dwa okna terminali, w pierwszym typie:
nc -l localhost 12345
Spowoduje to otwarcie procesu nasłuchiwania na porcie 12345 komputera lokalnego.
W drugim oknie terminala wprowadź polecenie curl, na przykład:
curl --form 'foo=bar' localhost:12345
W pierwszym oknie terminala zobaczysz dokładnie, co curl wysłał w żądaniu.
Teraz oczywiście ncnie wyśle niczego w odpowiedzi (chyba że sam go wpiszesz), więc musisz przerwać polecenie curl (control-c) i powtórzyć proces dla każdego testu.
Jest to jednak przydatna opcja do po prostu debugowania żądania, ponieważ nie bierzesz udziału w podróży w obie strony ani nie produkujesz fałszywych, powtarzalnych żądań, dopóki nie zrobisz tego poprawnie; gdy będziesz zadowolony z polecenia, po prostu przekieruj go na prawidłowy adres URL i możesz zacząć.
Możesz zrobić to samo dla dowolnej biblioteki cURL, po prostu edytuj swoje żądanie, aby wskazywało na lokalnego ncsłuchacza, dopóki nie będziesz zadowolony.
// Parse response and read cookies
preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);
// Build an array with cookies
foreach( $matches[1] as $index => $cookie )
$cookies[$cookie] = $matches[2][$index];
return $cookies;
} // end http_login_client
Dzięki, choć nie do końca odpowiadam na pytanie, właśnie tego potrzebowałem. Urządzenie A wysyła żądanie, urządzenie B sprawdza, czy żądanie zostało wysłane.
Odpowiedzi:
Myślę, że
curl -v
jest najłatwiejszy. Wypluje nagłówki żądań (wiersze poprzedzone „>”) bez konieczności zapisywania do pliku:źródło
curl -Ivs http://example.com > /dev/null
:-I
dlaHEAD
żądania,-v
aby wyświetlić wysłane nagłówki,-s
aby ukryć pasek postępu,> /dev/null
aby wyświetlić tylko wyjście -v, unikając powielania.-D -
był schludny, ale nie był dla mnie przydatny, ponieważ po prostu zduplikował-v
już wyświetlone nagłówki . Jeśli chcesz, aby nie były one prefiksowane do automatycznego użycia przez maszynę, być może byłoby lepiej w tym przypadku, ale chciałem tylko rzucić okiem na to, jaki problem był bardziej szczegółowo.curl -v https://www.example.com
; po drugie, drukuje równieżCONNECT
żądanie, jeśli odwiedzasz witrynę za pośrednictwem serwera proxy HTTP , takiego jakcurl --proxy my-proxy:8080 http://www.example.com
. Uważam, że pomogłoby to większej liczbie użytkowników, gdyby niektóre przykłady tych dwóch funkcji zostały wymienione w tej odpowiedzi.-I
We współczesnym świecie, kiedy ludzie pytają o wyświetlanie nagłówków, prawdopodobnie mówią o interfejsach API. A jeśli użyjesz tej-I
mentalności „Używam do wyświetlania nagłówków z moim serwerem Apache”, zmarnujesz dużo czasu na rozwijanie się przeciwkoHEAD
metodzie, którą prawdopodobnie zamierzasz użyćGET
. Przestań mówić ludziom, żeby ich używali-I
. Jeśli chcąHEAD
, użyj-X HEAD
(TWSS)Pytanie nie określało, czy
curl
chodziło o nazwane polecenie wiersza poleceń , czy całą bibliotekę cURL.Poniższy kod PHP wykorzystujący bibliotekę cURL używa pierwszego parametru jako metody HTTP (np. „GET”, „POST”, „OPCJE”), a drugiego parametru jako adresu URL.
Przykładowe użycie:
Zauważ, że wyniki są prawie identyczne z następującymi wierszami poleceń
źródło
CURLOPT_WRITEHEADER
iCURLOPT_FILE
są puste.php?
Jedynym sposobem, w jaki udało mi się zobaczyć moje wychodzące nagłówki (curl z php), było użycie następujących opcji:
Uzyskiwanie informacji o debugowaniu:
źródło
var_dump $data
zwróci nagłówki odpowiedzi oraz treść odpowiedzi. Var_dumpcurl_getinfo($ch)
da ci nagłówki żądania.CURLOPT_HEADER
jest nagłówkiem odpowiedzi -CURLINFO_HEADER_OUT
jest nagłówkiem żądania. O to prosi OP :)--trace-ascii
Możliwość zawinięcia pokaże nagłówków żądania, jak również nagłówki odpowiedzi i reakcji organizmu.Na przykład polecenie
tworzy plik,
curl.trace
który zaczyna się w następujący sposób:Otrzymał również odpowiedź (odpowiedź 302, a dokładniej, ale nieistotna), która została zarejestrowana.
Jeśli chcesz tylko zapisać nagłówki odpowiedzi , użyj
--dump-header
opcji:Jeśli potrzebujesz więcej informacji o dostępnych opcjach, użyj
curl --help | less
(daje kilkaset wierszy wyników, ale wspomina o wielu opcjach). Lub znajdź stronę podręcznika, na której znajduje się więcej wyjaśnień na temat opcji.źródło
curl --trace-ascii {nazwa pliku} lub użyj pojedynczego myślnika zamiast nazwy pliku, aby wysłać go na standardowe wyjście:
CURLOPT_DEBUGFUNCTION, jeśli używasz libcurl
To pokazuje ci wszystko , co curl wysyła i odbiera, z dodanymi dodatkowymi informacjami.
źródło
Próbowałem tutaj odpowiedzi i okazało się, że najbardziej użyteczna i najłatwiejsza nie jest jeszcze wymieniona jako odpowiedź, ale jest to:
Spowoduje to wydrukowanie nagłówków ZAPYTAŃ, a także nagłówków RESPONSE oraz innych przydatnych, takich jak certyfikat SSL i informacja, czy istniejące połączenie TCP zostało ponownie użyte.
-v
znacznik może być połączony z innymi flagi, oczywiście, na przykład do przekierowania śledzenia i szybka autoryzacja HTTP:Mam nadzieję że to pomoże.
źródło
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
Wiem, że to trochę za późno, ale moją ulubioną metodą jest to
netcat
, że dostajesz dokładnie to, cocurl
wysłano; może to różnić się od opcji--trace
lub,--trace-ascii
które nie będą poprawnie wyświetlać znaków spoza ASCII (wyświetlają się tylko jako kropki lub wymagają dekodowania).Możesz to zrobić równie łatwo, otwierając dwa okna terminali, w pierwszym typie:
Spowoduje to otwarcie procesu nasłuchiwania na porcie 12345 komputera lokalnego.
W drugim oknie terminala wprowadź polecenie curl, na przykład:
W pierwszym oknie terminala zobaczysz dokładnie, co curl wysłał w żądaniu.
Teraz oczywiście
nc
nie wyśle niczego w odpowiedzi (chyba że sam go wpiszesz), więc musisz przerwać polecenie curl (control-c) i powtórzyć proces dla każdego testu.Jest to jednak przydatna opcja do po prostu debugowania żądania, ponieważ nie bierzesz udziału w podróży w obie strony ani nie produkujesz fałszywych, powtarzalnych żądań, dopóki nie zrobisz tego poprawnie; gdy będziesz zadowolony z polecenia, po prostu przekieruj go na prawidłowy adres URL i możesz zacząć.
Możesz zrobić to samo dla dowolnej biblioteki cURL, po prostu edytuj swoje żądanie, aby wskazywało na lokalnego
nc
słuchacza, dopóki nie będziesz zadowolony.źródło
zrzuć nagłówki w jednym pliku, a ładunek odpowiedzi w innym pliku
źródło
Możesz również użyć
-I
opcji, jeśli chcesz wysłać żądanie HEAD, a nie żądanie GET.źródło
Oto mój klient HTTP w php, który tworzy zapytania pocztowe z zawartymi plikami cookie:
/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///
źródło
Możesz to zobaczyć za pomocą
-iv
źródło
Możesz użyć wireshark lub tcpdump, aby sprawdzić dowolny ruch sieciowy (również http).
źródło
Złóż przykładowe żądanie na https://http-tools.appspot.com/reflect-http-request/some-unique-id i sprawdź, co zawiera to żądanie (nagłówek żądania, treść żądania, parametry żądania) za pomocą odpowiedniego adresu URL https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Możesz użyć dowolnego ciągu zamiast
some-unique-id
, sprawdź https://http-tools.appspot.com, aby uzyskać więcej informacji.źródło