2010-07-02 20 views
71

Je crée une application d'automatisation Web Curl et je rencontre des problèmes pour ne pas obtenir le résultat souhaité de mon action POST. Je n'arrive pas à trouver comment afficher la requête POST complète que j'envoie (avec les en-têtes) , J'ai cherché sur ceci mais tout ce qui vient est les en-têtes de réponse, en fait je les veux aussi mais aussi la demande, qu'aucun des messages que je trouve sur google semble mentionner ..Afficher les en-têtes de requête POST Curl? Y a-t-il un moyen de faire cela?

Je sais que je peux afficher le résultat d'une demande boucle en utilisant quelque chose comme ça (me pardonner si ma syntaxe est éteinte, je l'ai déjà fermé ma machine virtuelle avec mon ide et le code pour faire référence à

$result = curl($curl_exect) ; 

Quoi qu'il en soit, je J'apprécierais grandement tout conseil sur la façon de voir les en-têtes complets, merci

+1

Utilisez ** 'CURLOPT_VERBOSE' **. – ekillaby

+0

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

Répondre

52

Vous pouvez voir les informations concernant le transfert en faisant:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true); 

avant la demande, et

$information = curl_getinfo($curl_exect); 

après la demande

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

Vous pouvez également utiliser le CURLOPT_HEADER dans votre curl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true); 

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE); 

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

return false; 

Ce ne sont que quelques méthodes d'utilisation des en-têtes.

+4

J'ai essayé cela mais il sort juste un tableau du POST donc il ne montre pas les en-têtes exactes, seulement le POST et pas exactement comme le serveur de réception le verrait donc ce n'est pas idéal pour le dépannage – Rick

+4

La réponse n'est pas complète. Avant que la requête soit exécutée, vous devez 'curl_setopt ($ curl_exect, CURLINFO_HEADER_OUT, true);' – naitsirch

+0

cela montre seulement ce que le serveur a renvoyé. il semble que curl_setopt ($ ch, CURLOPT_VERBOSE, true); vous permettra de voir ce que vous envoyez au serveur. –

3

J'ai eu exactement le même problème ces derniers temps, et j'ai installé Wireshark (c'est un outil de surveillance de réseau). Vous pouvez tout voir avec ceci, excepté le trafic crypté (HTTPS).

+2

WireShark fonctionne sur WinCap ou sur un autre système de capture, vous devez avoir un chipset basé sur atheros pour qu'il fonctionne, pourquoi ne pas installer chrome et pressez Ctrl + Shift + J puis cliquez sur le bouton XHR et le nom du fichier puis voir les en-têtes et les données. – RobertPitt

+0

J'ai essayé wireshark mais il ne semble pas ramasser mon trafic POST sortant Curl – Rick

+0

Je supposais que vous travailliez sur un serveur local, est-ce le cas? – greg0ire

4

Vous pouvez vous faire demander des en-têtes par vous-même en utilisant:

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

Comme ECRIT sur how make request

+0

Merci pour le post, je suppose que je ne comprends pas entièrement cela car c'est une bibliothèque différente de curl, non? Y at-il un moyen de le faire avec juste curl? Sinon, je vais chercher à le faire de cette façon, c'est juste que je ne suis pas familier avec fputs – Rick

+0

C'est en fait la fonctionnalité native de php –

142

Voici tout ce que vous avez besoin:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking 
... // do curl request  
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT); // request headers 
+14

La meilleure réponse IMO – marlar

+6

Comment peut-on afficher les données POST ainsi? C'est à dire. cela ajouté par curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData); –

+0

@DanDascalescu Puisque vous avez POSTé les données, lors de la création de la requête Curl, il n'est pas nécessaire de les récupérer. Remarque: Les valeurs de formulaire POSTing sont envoyées en tant que "données de formulaire", pas en-têtes, d'où la raison ci-dessus ne les affiche pas. Si vous avez vraiment besoin de voir ce qui est sur le fil, essayez WireShark. –

8

Vous pouvez enregistrer tous les en-têtes envoyés par boucle vers un fichier en utilisant:

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