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


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.


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

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);

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.