Curl POST-Anforderungsheader anzeigen? Gibt es eine Möglichkeit, dies zu tun?

85

Ich erstelle eine Curl-Webautomatisierungs-App und habe ein Problem damit, dass ich nicht das gewünschte Ergebnis meiner POST-Aktion erhalte. Ich habe Probleme herauszufinden, wie ich die vollständige POST-Anfrage anzeigen kann, die ich sende (mit Headern) Ich habe danach gesucht, aber alles, was auftaucht, sind die Antwort-Header. Eigentlich möchte ich diese auch, aber auch die Anfrage, die keiner der Beiträge, die ich bei Google finde, zu erwähnen scheint.

Ich weiß, dass ich das Ergebnis einer Curl-Anforderung mit so etwas anzeigen kann (verzeihen Sie mir, wenn meine Syntax deaktiviert ist, habe ich meine virtuelle Maschine bereits mit meiner Idee und meinem Code heruntergefahren, auf die verwiesen werden soll

 $result = curl($curl_exect) ;

Wie auch immer, ich würde mich über Ratschläge zum Anzeigen der vollständigen Überschriften sehr freuen, danke

Rick
quelle

Antworten:

81

Sie können die Informationen bezüglich der Übertragung sehen, indem Sie Folgendes tun:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

vor der Anfrage und

$information = curl_getinfo($curl_exect);

nach der Anfrage

Ansicht: http://www.php.net/manual/en/function.curl-getinfo.php

Sie können das auch CURLOPT_HEADERin Ihrem verwendencurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Dies sind nur einige Methoden zur Verwendung der Header.

RobertPitt
quelle
4
Ich habe es versucht, aber es gibt nur ein Array des POST aus, sodass nicht die genauen Header angezeigt werden, sondern nur der POST und nicht genau so, wie es der empfangende Server sehen würde. Daher ist es nicht ideal für die Fehlerbehebung
Rick
5
Die Antwort ist nicht vollständig. Bevor die Anfrage ausgeführt wird, müssen Siecurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
Dies zeigt nur, was der Server zurückgesendet hat. es scheint wie curl_setopt ($ ch, CURLOPT_VERBOSE, true); Hier können Sie sehen, was Sie an den Server senden.
Steven Teo
167

Hier ist alles was Sie brauchen:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Joseph Lust
quelle
6
Wie kann man auch die POST-Daten anzeigen? Dh das durch curl_setopt hinzugefügte ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu
@DanDascalescu Da Sie die Daten beim Erstellen der Curl-Anforderung POSTEN, ist es nicht erforderlich, sie zurück zu erfassen. Hinweis: POST-Formularwerte werden als "Formulardaten" und nicht als Überschriften gesendet, weshalb sie in den obigen Abschnitten nicht angezeigt werden. Wenn Sie wirklich sehen müssen, was sich auf dem Kabel befindet, versuchen Sie es mit WireShark.
Joseph Lust
10

Sie können alle per Curl gesendeten Header in einer Datei speichern, indem Sie:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);
Nassim Aouragh
quelle
6

Sie können Header selbst anfordern, indem Sie Folgendes verwenden:

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

Wie geschrieben, wie Anfrage machen

Liutas
quelle
Vielen Dank für den Beitrag, ich glaube, ich verstehe das nicht ganz, da es eine andere Bibliothek als Curl ist, oder? Gibt es eine Möglichkeit, dies nur mit Locken zu tun? Wenn nicht, werde ich es so machen, es ist nur so, dass ich mit fputs nicht vertraut bin
Rick
Dies ist eigentlich native Funktionalität von PHP
SSH Dies
1
Dies ist eine coole Antwort, da sie die Art der Rohanforderung enthüllt. Mir wurde immer beigebracht, cURL zu verwenden, eine Bibliothek, die manchmal installiert werden muss und nicht immer verfügbar ist.
Altimus Prime
2

Ich hatte in letzter Zeit genau das gleiche Problem und habe Wireshark installiert (es ist ein Netzwerküberwachungstool). Sie können damit alles sehen, außer verschlüsseltem Verkehr (HTTPS).

greg0ire
quelle
2
WireShark läuft auf WinCap oder einem anderen Erfassungssystem. Sie müssen einen Atheros-basierten Chipsatz haben, damit es funktioniert. Ich denke, warum installieren Sie nicht einfach Chrome und drücken Sie, Ctrl+Shift+Jklicken Sie auf die Schaltfläche XHRund den Dateinamen und sehen Sie dann Header und Daten.
RobertPitt
Ich habe Wireshark ausprobiert, aber es scheint meinen ausgehenden Curl POST-Verkehr nicht aufzunehmen
Rick
Ich nahm an, dass Sie auf einem lokalen Server arbeiten. Ist das der Fall?
Greg0ire
Robert, ich versuche, das zu tun, was Sie in Chrome gesagt haben, aber es macht nichts, wenn ich Strg + Umschalt + 3 mache. Ich suche nach Informationen dazu, kann aber anscheinend nichts Relevantes finden, welche Funktion von Chrome greift das zu? Vielen Dank
Rick
Ok, ich habe dies in Bezug auf das Anzeigen der Header in Chrome gefunden: google.com/support/forum/p/Chrome/… Ich glaube, es ist Strg + Umschalt + i, um darauf zuzugreifen
Rick