596 Stimmen

Wie kann ich die Anfrage-Header von curl sehen, wenn ich eine Anfrage an den Server sende?

Ich möchte die Kopfzeilen der Anfrage sehen, die von curl wenn ich eine Anfrage an den Server sende. Wie kann ich das überprüfen?

0 Stimmen

Diese URL könnte hilfreich sein. helloacm.com/curl

1 Stimmen

Sie können damit Folgendes testen run-node.com/now-use-curl-with-http-echo-com

615voto

Steven Kryskalla Punkte 13578

Ich denke curl --verbose/-v ist das Einfachste. Es spuckt die Kopfzeilen der Anfrage aus (Zeilen mit vorangestelltem '>'), ohne in eine Datei schreiben zu müssen:

$ 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
...

64 Stimmen

Curl -v -D - stackoverflow.com -o /dev/null (um nicht den gesamten Inhalt der Seite anzuzeigen, sondern nur die Kopfzeilen)

24 Stimmen

curl -Ivs http://example.com > /dev/null : -I für eine HEAD Anfrage, -v um gesendete Kopfzeilen anzuzeigen, -s um den Fortschrittsbalken auszublenden, > /dev/null um nur die -v-Ausgabe anzuzeigen und eine Duplizierung zu vermeiden.

0 Stimmen

@PiotrekDe -D - war nett, aber für mich nicht nützlich, da es einfach die Kopfzeilen duplizierte, die -v bereits angezeigt. Wenn Sie sie für den maschinellen Verbrauch nicht vorfixiert haben wollen, wäre es in diesem Fall vielleicht besser, aber ich wollte nur einen Blick darauf werfen, was ein Problem im Detail war.

144voto

Tash Pemhiwa Punkte 7392

In der Frage wurde nicht angegeben, ob ein Kommandozeilenbefehl namens curl oder die gesamte cURL-Bibliothek gemeint war.

Der folgende PHP-Code mit der cURL-Bibliothek verwendet den ersten Parameter als HTTP-Methode (z. B. "GET", "POST", "OPTIONS") und den zweiten Parameter als URL.

<?php
$ch = curl_init();
$f = tmpfile(); # will be automatically removed after fclose()
curl_setopt_array($ch, array(
    CURLOPT_CUSTOMREQUEST  => $argv[1],
    CURLOPT_URL            => $argv[2], 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 0,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_HEADER         => 0,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_STDERR         => $f,
));
$response = curl_exec($ch);
fseek($f, 0);
echo fread($f, 32*1024); # output up to 32 KB cURL verbose log
fclose($f);
curl_close($ch);
echo $response;

Beispiel für die Verwendung:

php curl-test.php OPTIONS https://google.com

Beachten Sie, dass die Ergebnisse fast identisch mit der folgenden Befehlszeile sind

curl -v -s -o - -X OPTIONS https://google.com

0 Stimmen

Dies ist die beste Antwort, da die Datei, die in dieser Methode verwendet wird, alles enthält, was in curl_getinfo() referenziert wird, zusammen mit weiteren Details über die Anfrage und die Antwort.

0 Stimmen

Schön! Gibt es eine Möglichkeit, den Code zu verbessern, um auch die POST-Daten anzuzeigen? D.h. das, was durch curl_setopt($ch, CURLOPT_POSTFIELDS, $postData) hinzugefügt wird;

0 Stimmen

Das macht keinen Sinn. CURLOPT_STDERR macht curl schreiben Fehler im Strom $f und nicht die Anfragedaten. Und deshalb hat es bei mir nicht funktioniert. Oder habe ich etwas Wichtiges übersehen?

72voto

Jonathan Leffler Punkte 694013

El --trace-ascii Option zu locken. zeigt die Kopfzeilen der Anfrage, die Kopfzeilen der Antwort und den Antworttext an.

Zum Beispiel kann der Befehl

curl --trace-ascii curl.trace http://www.google.com/ 

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: 

Sie erhielt auch eine Antwort (eine 302-Antwort, um genau zu sein, aber das ist irrelevant), die protokolliert wurde.


Wenn Sie nur die Antwort Kopfzeilen, verwenden Sie die --dump-header Option:

curl -D file url
curl --dump-header file url

Wenn Sie weitere Informationen über die verfügbaren Optionen benötigen, verwenden Sie curl --help | less (es erzeugt ein paar hundert Zeilen Ausgabe, aber es werden viele Optionen erwähnt). Oder finden Sie die Handbuchseite wo die Bedeutung der einzelnen Optionen näher erläutert wird.

12 Stimmen

-D gibt Ihnen die Antwort Kopfzeilen (wie -I, aber an STDIN). Die Frage, die nach dem Anfrage Kopfzeilen.

51voto

Daniel Stenberg Punkte 48659

Locken. --trace-ascii {Dateiname} oder verwenden Sie einen einzelnen Bindestrich anstelle des Dateinamens, um ihn an stdout zu senden:

curl --trace-ascii - {URL}

CURLOPT_DEBUGFUNKTION wenn Sie libcurl verwenden

Dies zeigt Ihnen alles curl sendet und empfängt, mit einigen zusätzlichen Informationen.

2 Stimmen

Dies ist sehr ausführlich, zeigt aber alles, was Sie wissen müssen.

1 Stimmen

Dies ist die einzige Antwort, die mir geholfen hat. Ein externes Skript setzte einige Proxy-Einstellungen und dies sagte mir, dass der Proxy verwendet wurde, obwohl er nicht hätte verwendet werden dürfen. Die ausführliche Ausgabe erwähnte den Proxy nicht.

51voto

Kniganapolke Punkte 4813

Der einzige Weg, wie ich meine ausgehenden Header sehen konnte (curl mit php), war die Verwendung der folgenden Optionen:

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

Ihre Debug-Informationen erhalten:

$data = curl_exec($ch);
var_dump($data);
var_dump(curl_getinfo($ch));

1 Stimmen

Bei mir war es der Antwort-Header und nicht der Ausgangs-Header.

3 Stimmen

var_dump $data gibt sowohl die Kopfzeilen der Antwort als auch den Antwortkörper zurück. Die Funktion var_dump curl_getinfo($ch) erhalten Sie die Kopfzeilen der Anfrage.

2 Stimmen

CURLOPT_HEADER ist die Kopfzeile der Antwort - CURLINFO_HEADER_OUT ist die Kopfzeile der Anfrage. Dies ist, was der OP fragt für :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X