Ich denke curl -vist das einfachste. Die Anforderungsheader (Zeilen mit dem Präfix '>') werden ausgespuckt, ohne dass in eine Datei geschrieben werden muss:
$ 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
...
curl -v -D - stackoverflow.com -o / dev / null (um nicht den gesamten Inhalt der Site anzuzeigen, sondern nur die
Überschriften
20
curl -Ivs http://example.com > /dev/null: -Ifür eine HEADAnforderung, -vum gesendete Header anzuzeigen, -sden Fortschrittsbalken auszublenden und > /dev/nullnur die Ausgabe -v anzuzeigen, um Doppelarbeit zu vermeiden.
hier
@PiotrekDe -D -war ordentlich, aber für mich nicht nützlich, da es einfach die -vbereits angezeigten Header duplizierte . Wenn Sie möchten, dass sie für den automatisierten Maschinenverbrauch nicht festgelegt sind, ist dies in diesem Fall möglicherweise besser, aber ich wollte nur einen genaueren Blick auf das Problem werfen.
Pysis
1
Es gibt zwei sehr hilfreiche Funktionen des "ausführlichen" Flags: Erstens druckt es auch den TLS-Handshake-Prozess, wenn über HTTPS auf eine Website zugegriffen wird, wie z curl -v https://www.example.com. Zweitens wird die CONNECTAnforderung auch gedruckt, wenn Sie die Site über einen HTTP-Proxy besuchen , z curl --proxy my-proxy:8080 http://www.example.com. Ich glaube, es würde mehr Benutzern helfen, wenn einige Beispiele für diese beiden Funktionen in dieser Antwort erwähnt werden.
Franklin Yu
1
TL; DR: Nicht verwenden-I In der modernen Welt sprechen Leute, die nach Headern fragen, wahrscheinlich über APIs. Und wenn Sie die -IMentalität "Ich verwende , um die Header mit meinem Apache-Webserver zu sehen" verwenden, werden Sie viel Zeit damit verschwenden, sich gegen eine HEADMethode zu entwickeln, die Sie wahrscheinlich verwenden möchten GET. Hör auf, den Leuten zu sagen, dass sie es benutzen sollen -I. Wenn sie wollen HEAD, verwenden Sie -X HEAD(TWSS)
Bruno Bronosky
141
In der Frage wurde nicht angegeben, ob der genannte Befehlszeilenbefehl curloder die gesamte cURL-Bibliothek gemeint ist.
Der folgende PHP-Code, der die cURL-Bibliothek verwendet, verwendet den ersten Parameter als HTTP-Methode (z. B. "GET", "POST", "OPTIONS") und den zweiten Parameter als URL.
Dies ist die beste Antwort, da die in dieser Methode verwendete Datei alles in curl_getinfo () enthält, auf das unten verwiesen wird, sowie weitere Details sowohl zur Anforderung als auch zur Antwort.
Mike_K
3
Sie können CURLOPT_WRITEHEADER für die Header-Informationen und CURLOPT_FILE für die gesamte Übertragung verwenden
sturrockad
1
Beachten Sie, dass bei Ablehnung der Verbindung Dateien angegeben werden, die mit angegeben wurden CURLOPT_WRITEHEADER und CURLOPT_FILEleer sind.
eithed
34
Wer hat etwas über die Verwendung gesagtphp?
Eddie B
1
Ich habe Ihre Antwort positiv bewertet, da Ihre Frage, obwohl die Frage nicht mit PHP zu tun hatte, mich in die richtige Richtung wies, um mein eigenes Problem mit dem Senden eines Inhaber-Tokens zu lösen. Vielen Dank. Ich habe meinen Grund hier nur in dem vergeblichen Versuch angegeben, diese Frage in zukünftigen Google-Suchen nach PHP-Entwicklern mit einem ähnlichen Problem auftauchen zu lassen.
Chris
49
Die einzige Möglichkeit, meine ausgehenden Header (Curl mit PHP) zu sehen, war die Verwendung der folgenden Optionen:
Erzeugt eine Datei curl.trace, die wie folgt beginnt:
== 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:
Es wurde auch eine Antwort (eine 302-Antwort, um genau zu sein, aber irrelevant) erhalten, die protokolliert wurde.
Wenn Sie nur die gespeichert werden soll Antwort - Header, verwenden Sie die --dump-headerOption:
curl -D file url
curl --dump-header file url
Wenn Sie weitere Informationen zu den verfügbaren Optionen benötigen, verwenden Sie curl --help | less(es werden einige hundert Ausgabezeilen erzeugt, es werden jedoch viele Optionen erwähnt). Oder finden Sie die Handbuchseite, auf der Sie näher erläutern, was die Optionen bedeuten.
Dies ist sehr ausführlich, zeigt Ihnen aber auf jeden Fall alles, was Sie wissen müssen.
Tripleee
27
Ich habe die Antworten hier ausprobiert und festgestellt, dass die nützlichste und einfachste noch nicht als Antwort aufgeführt ist, aber es ist:
curl -v https://example.com/path
Dadurch werden die REQUEST- Header sowie die RESPONSE- Header und andere nützliche Elemente wie das SSL-Zertifikat und die Frage, ob eine vorhandene TCP-Verbindung wiederverwendet wurde, ausgedruckt. Das -vFlag kann natürlich mit anderen Flags kombiniert werden, z. B. um Weiterleitungen zu folgen und zur HTTP-Authentifizierung aufzufordern:
Ein Befehl wie der folgende zeigt drei Abschnitte: Anforderungsheader, Antwortheader und Daten (durch CRLF getrennt). Es vermeidet technische Informationen und syntaktisches Rauschen, das durch Curl hinzugefügt wird.
Ich weiß, dass dies etwas spät ist, aber meine bevorzugte Methode dafür ist netcat, dass Sie genau das erhalten, was curlgesendet wurde. Dies kann von den Optionen --traceoder abweichen, bei --trace-asciidenen Nicht-ASCII-Zeichen nicht richtig angezeigt werden (sie werden nur als Punkte angezeigt oder müssen dekodiert werden).
Sie können dies genauso einfach tun, indem Sie zwei Terminalfenster im ersten Typ öffnen:
nc -l localhost 12345
Dies öffnet einen Abhörvorgang an Port 12345 Ihres lokalen Computers.
Geben Sie im zweiten Terminalfenster Ihren Curl-Befehl ein, zum Beispiel:
curl --form 'foo=bar' localhost:12345
Im ersten Terminalfenster sehen Sie genau, welche Locke in der Anfrage gesendet wurde.
Jetzt wird natürlich ncnichts als Antwort gesendet (es sei denn, Sie geben es selbst ein), daher müssen Sie den Curl-Befehl (control-c) unterbrechen und den Vorgang für jeden Test wiederholen.
Dies ist jedoch eine nützliche Option, um Ihre Anfrage einfach zu debuggen, da Sie nirgendwo einen Roundtrip durchführen oder irgendwo falsche iterative Anfragen erstellen, bis Sie es richtig verstanden haben. Wenn Sie mit dem Befehl zufrieden sind, leiten Sie ihn einfach an eine gültige URL weiter und los geht's.
Sie können dies auch für jede cURL-Bibliothek tun. Bearbeiten Sie einfach Ihre Anfrage, um auf den lokalen ncListener zu verweisen, bis Sie damit zufrieden sind.
// 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
Danke, obwohl ich die Frage nicht genau beantworte, ist dies genau das, was ich brauchte. Gerät A stellt eine Anfrage, Gerät B prüft, ob eine Anfrage gestellt wurde.
Antworten:
Ich denke
curl -v
ist das einfachste. Die Anforderungsheader (Zeilen mit dem Präfix '>') werden ausgespuckt, ohne dass in eine Datei geschrieben werden muss:quelle
curl -Ivs http://example.com > /dev/null
:-I
für eineHEAD
Anforderung,-v
um gesendete Header anzuzeigen,-s
den Fortschrittsbalken auszublenden und> /dev/null
nur die Ausgabe -v anzuzeigen, um Doppelarbeit zu vermeiden.-D -
war ordentlich, aber für mich nicht nützlich, da es einfach die-v
bereits angezeigten Header duplizierte . Wenn Sie möchten, dass sie für den automatisierten Maschinenverbrauch nicht festgelegt sind, ist dies in diesem Fall möglicherweise besser, aber ich wollte nur einen genaueren Blick auf das Problem werfen.curl -v https://www.example.com
. Zweitens wird dieCONNECT
Anforderung auch gedruckt, wenn Sie die Site über einen HTTP-Proxy besuchen , zcurl --proxy my-proxy:8080 http://www.example.com
. Ich glaube, es würde mehr Benutzern helfen, wenn einige Beispiele für diese beiden Funktionen in dieser Antwort erwähnt werden.-I
In der modernen Welt sprechen Leute, die nach Headern fragen, wahrscheinlich über APIs. Und wenn Sie die-I
Mentalität "Ich verwende , um die Header mit meinem Apache-Webserver zu sehen" verwenden, werden Sie viel Zeit damit verschwenden, sich gegen eineHEAD
Methode zu entwickeln, die Sie wahrscheinlich verwenden möchtenGET
. Hör auf, den Leuten zu sagen, dass sie es benutzen sollen-I
. Wenn sie wollenHEAD
, verwenden Sie-X HEAD
(TWSS)In der Frage wurde nicht angegeben, ob der genannte Befehlszeilenbefehl
curl
oder die gesamte cURL-Bibliothek gemeint ist.Der folgende PHP-Code, der die cURL-Bibliothek verwendet, verwendet den ersten Parameter als HTTP-Methode (z. B. "GET", "POST", "OPTIONS") und den zweiten Parameter als URL.
Anwendungsbeispiel:
Beachten Sie, dass die Ergebnisse fast identisch mit der folgenden Befehlszeile sind
quelle
CURLOPT_WRITEHEADER
undCURLOPT_FILE
leer sind.php?
Die einzige Möglichkeit, meine ausgehenden Header (Curl mit PHP) zu sehen, war die Verwendung der folgenden Optionen:
Abrufen Ihrer Debug-Informationen:
quelle
var_dump $data
gibt die Antwortheader sowie den Antworttext zurück. Der var_dumpcurl_getinfo($ch)
gibt Ihnen die Anforderungsheader.CURLOPT_HEADER
ist der Antwortheader -CURLINFO_HEADER_OUT
ist der Anforderungsheader. Dies ist, was die OP verlangt :)Die
--trace-ascii
Option zum Einrollen zeigt die Anforderungsheader sowie die Antwortheader und den Antworttext an.Zum Beispiel der Befehl
Erzeugt eine Datei
curl.trace
, die wie folgt beginnt:Es wurde auch eine Antwort (eine 302-Antwort, um genau zu sein, aber irrelevant) erhalten, die protokolliert wurde.
Wenn Sie nur die gespeichert werden soll Antwort - Header, verwenden Sie die
--dump-header
Option:Wenn Sie weitere Informationen zu den verfügbaren Optionen benötigen, verwenden Sie
curl --help | less
(es werden einige hundert Ausgabezeilen erzeugt, es werden jedoch viele Optionen erwähnt). Oder finden Sie die Handbuchseite, auf der Sie näher erläutern, was die Optionen bedeuten.quelle
curl --trace-ascii {Dateiname} oder verwenden Sie einen einzelnen Bindestrich anstelle des Dateinamens, um ihn an stdout zu senden:
CURLOPT_DEBUGFUNCTION, wenn Sie libcurl verwenden
Dies zeigt Ihnen alles , was Curl sendet und empfängt, mit einigen zusätzlichen Informationen.
quelle
Ich habe die Antworten hier ausprobiert und festgestellt, dass die nützlichste und einfachste noch nicht als Antwort aufgeführt ist, aber es ist:
Dadurch werden die REQUEST- Header sowie die RESPONSE- Header und andere nützliche Elemente wie das SSL-Zertifikat und die Frage, ob eine vorhandene TCP-Verbindung wiederverwendet wurde, ausgedruckt. Das
-v
Flag kann natürlich mit anderen Flags kombiniert werden, z. B. um Weiterleitungen zu folgen und zur HTTP-Authentifizierung aufzufordern:Hoffe das hilft.
quelle
Ein Befehl wie der folgende zeigt drei Abschnitte: Anforderungsheader, Antwortheader und Daten (durch CRLF getrennt). Es vermeidet technische Informationen und syntaktisches Rauschen, das durch Curl hinzugefügt wird.
Der Befehl erzeugt die folgende Ausgabe:
Beschreibung:
-vs
- Kopfzeilen hinzufügen (-v), aber Fortschrittsbalken (-s) entfernen2>&1
- kombinieren Sie stdout und stderr zu einem einzigen stdoutsed
- Bearbeiten Sie die durch Curl erzeugte Antwort mit den folgenden Befehlen/^* /d
- Zeilen entfernen, die mit '*' beginnen (technische Informationen)/bytes data]$/d
- Zeilen entfernen, die mit 'Byte-Daten] enden' (technische Informationen)s/> //
- Entfernen Sie das Präfix '>'s/< //
- Entfernen Sie das Präfix '<'quelle
Ich weiß, dass dies etwas spät ist, aber meine bevorzugte Methode dafür ist
netcat
, dass Sie genau das erhalten, wascurl
gesendet wurde. Dies kann von den Optionen--trace
oder abweichen, bei--trace-ascii
denen Nicht-ASCII-Zeichen nicht richtig angezeigt werden (sie werden nur als Punkte angezeigt oder müssen dekodiert werden).Sie können dies genauso einfach tun, indem Sie zwei Terminalfenster im ersten Typ öffnen:
Dies öffnet einen Abhörvorgang an Port 12345 Ihres lokalen Computers.
Geben Sie im zweiten Terminalfenster Ihren Curl-Befehl ein, zum Beispiel:
Im ersten Terminalfenster sehen Sie genau, welche Locke in der Anfrage gesendet wurde.
Jetzt wird natürlich
nc
nichts als Antwort gesendet (es sei denn, Sie geben es selbst ein), daher müssen Sie den Curl-Befehl (control-c) unterbrechen und den Vorgang für jeden Test wiederholen.Dies ist jedoch eine nützliche Option, um Ihre Anfrage einfach zu debuggen, da Sie nirgendwo einen Roundtrip durchführen oder irgendwo falsche iterative Anfragen erstellen, bis Sie es richtig verstanden haben. Wenn Sie mit dem Befehl zufrieden sind, leiten Sie ihn einfach an eine gültige URL weiter und los geht's.
Sie können dies auch für jede cURL-Bibliothek tun. Bearbeiten Sie einfach Ihre Anfrage, um auf den lokalen
nc
Listener zu verweisen, bis Sie damit zufrieden sind.quelle
Speichern Sie die Header in einer Datei und die Nutzdaten der Antwort in einer anderen Datei
quelle
Sie können die
-I
Option auch verwenden, wenn Sie eine HEAD-Anforderung und keine GET-Anforderung senden möchten.quelle
Hier ist mein http-Client in PHP, um Post-Anfragen mit Cookies zu stellen:
/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///
quelle
Sie können es mit sehen
-iv
quelle
Sie können wireshark oder tcpdump verwenden , um den Netzwerkverkehr (auch http) zu überprüfen .
quelle
Stellen Sie eine Beispielanforderung an https://http-tools.appspot.com/reflect-http-request/some-unique-id und überprüfen Sie anhand der entsprechenden Finder-URL https , was diese Anforderung enthält (Anforderungsheader, Anforderungshauptteil, Anforderungsparameter) : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Sie können stattdessen eine beliebige Zeichenfolge verwenden. Weitere Informationen finden
some-unique-id
Sie unter https://http-tools.appspot.com .quelle