2010-07-02 5 views
71

Ich baue eine Curl-Webautomatisierungs-App und habe ein Problem damit, das gewünschte Ergebnis meiner POST-Aktion nicht zu erhalten. Ich habe Probleme herauszufinden, wie ich die vollständige POST-Anfrage anzeigen kann (mit Kopfzeilen) Ich habe auf dieser Suche, aber alles, was kommt, ist die Antwort Header, eigentlich möchte ich auch diese, aber auch die Anfrage, die keine der Beiträge, die ich bei Google finde scheinen zu erwähnen.Show Curl POST Anfrage Header? Gibt es eine Möglichkeit, dies zu tun?

Ich weiß, ich kann anzeigen das Ergebnis eines curl Anfrage so etwas wie dies mit (verzeihen Sie mir, wenn meine Syntax ausgeschaltet ist, schloß ich bereits meine virtuelle Maschine mit meinem ide und Code unten Anyways zu

$result = curl($curl_exect) ; 

zu beziehen, I würde mich sehr über jeden Hinweis freuen, wie man die vollen Header sieht, danke

+1

Verwenden Sie ** 'CURLOPT_VERBOSE' **. – ekillaby

+0

Mögliches Duplikat: http://stackoverflow.com/questions/866946/how-can-i-see-the-request-headers-made-by-curl-when-sending-a-request-to-the-ser –

Antwort

52

Sie können die Informationen in Bezug auf die Übertragung sehen, indem Sie:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true); 

vor der Anforderung, und

$information = curl_getinfo($curl_exect); 

nach der Anfrage

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

Sie können auch die CURLOPT_HEADER in Ihrem curl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true); 

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE); 

if($httpcode == 200) { 
    return true; 
} 

return false; 

Dies sind verwenden nur einige Methoden, um die Header verwendet wird.

+4

Ich versuchte dies, aber es gibt nur ein Array des POST, so dass es nicht die exakten Header, nur die POST und nicht genau, wie der empfangende Server es sehen würde, so ist es nicht ideal für die Fehlersuche – Rick

+4

Die Antwort ist nicht vollständig. Bevor die Anfrage ausgeführt wird, müssen Sie 'curl_setopt ($ curl_exect, CURLINFO_HEADER_OUT, true);' – naitsirch

+0

dies zeigt nur, was der Server zurückgeschickt hat. es scheint wie curl_setopt ($ ch, CURLOPT_VERBOSE, true); können Sie sehen, was Sie an den Server senden. –

3

Ich hatte genau das gleiche Problem in letzter Zeit, und ich installierte Wireshark (es ist ein Netzwerk-Monitoring-Tool). Sie können damit alles sehen, mit Ausnahme von verschlüsseltem Verkehr (HTTPS).

+2

WireShark läuft auf WinCap oder anderen Capturing-Systemen, Sie müssen einen atheros-basierten Chipsatz haben, damit es funktioniert. Ich denke, warum installieren Sie nicht einfach chrome und drücken Sie 'Strg + Shift + J', dann klicken Sie den' XHR' Button und den Dateinamen und dann Kopfzeilen und Daten sehen. – RobertPitt

+0

Ich habe versucht, wireshark, aber es scheint nicht meine ausgehende Curl POST Verkehr abholen – Rick

+0

Ich nahm an, dass Sie auf einem lokalen Server arbeiten, ist es der Fall? – greg0ire

4

Sie können Sie Header machen anfordern, indem Sie sich mit:

// 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 writen auf how make request

+0

Danke für den Post, ich denke, ich verstehe das nicht ganz, da es eine andere Bibliothek als Curl ist, oder? Gibt es eine Möglichkeit, dies mit nur Curl zu tun? Wenn nicht, werde ich es auf diese Weise tun, es ist nur, dass ich nicht mit fputs vertraut bin – Rick

+0

Das ist eigentlich native Funktionalität von PHP –

142

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 
+14

Die beste Antwort IMO – marlar

+6

Wie kann man die POST-Daten auch anzeigen? I.e. das wurde hinzugefügt durch curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData); –

+0

@DanDascalescu Seit dem POST der Daten müssen Sie beim Erstellen der Curl-Anforderung die Daten nicht mehr zurückschreiben. Hinweis: POSTing-Formularwerte werden als "Formulardaten" gesendet, nicht als Header, weshalb sie oben nicht angezeigt werden. Wenn Sie wirklich sehen müssen, was auf dem Draht ist, versuchen Sie WireShark. –

8

Sie können alle Header von curl gesendet sparen in eine Datei unter Verwendung von:

$f = fopen('request.txt', 'w'); 
curl_setopt($ch,CURLOPT_VERBOSE,true); 
curl_setopt($ch,CURLOPT_STDERR ,$f); 
Verwandte Themen