98 votes

Afficher les en-têtes de la requête Curl POST ? Existe-t-il un moyen de faire cela ?

Je suis en train de construire une application d'automatisation web Curl et j'ai quelques problèmes avec le fait de ne pas obtenir le résultat désiré de mon action POST, j'ai quelques difficultés à trouver comment je peux montrer la requête POST complète que j'envoie (avec les en-têtes), j'ai fait des recherches sur ce sujet mais tout ce qui vient est les en-têtes de réponse, en fait je veux ceux-ci aussi mais aussi la requête, ce qu'aucun des posts que je trouve sur google ne semble mentionner .

Je sais que je peux afficher le résultat d'une requête curl en utilisant quelque chose comme ceci (pardonnez-moi si ma syntaxe est erronée, j'ai déjà éteint ma machine virtuelle avec mon ide et mon code pour m'y référer

 $result = curl($curl_exect) ;

Quoi qu'il en soit, j'apprécierais beaucoup tout conseil sur la façon d'afficher les en-têtes complets, merci.

0 votes

175voto

Joseph Lust Points 4961

Voici tout ce dont vous avez besoin :

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

6 votes

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

0 votes

@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 capturer en retour. Remarque : les valeurs de formulaire POSTing sont envoyées en tant que "Form Data", et non en tant qu'en-têtes, ce qui explique pourquoi l'image ci-dessus ne les montre pas. Si vous avez vraiment besoin de voir ce qui se passe sur le fil, essayez WireShark.

93voto

RobertPitt Points 28140

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

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

return $httpcode == 200;

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

4 votes

J'ai essayé ceci mais cela ne sort qu'un tableau du POST donc cela ne montre pas les en-têtes exacts, seulement le POST et pas exactement comme le serveur récepteur le verrait donc ce n'est pas idéal pour le dépannage.

6 votes

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

1 votes

Cela ne montre que 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.

10voto

Nassim Aouragh Points 1

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

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

8voto

Liutas Points 481

Vous pouvez faire vos en-têtes de requête 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 écrit sur comment faire une demande

0 votes

Merci pour le post, je suppose que je ne comprends pas bien car c'est une bibliothèque différente de curl, n'est-ce pas ? Y a-t-il un moyen de faire cela avec seulement curl ? Si non, je vais chercher à le faire de cette façon, c'est juste que je ne suis pas familier avec les fputs.

0 votes

Il s'agit en fait d'une fonctionnalité native de php

1 votes

C'est une réponse intéressante car elle expose une sorte de requête brute. On m'a toujours appris à utiliser cURL, une bibliothèque qui doit parfois être installée et qui n'est pas toujours disponible.

2voto

greg0ire Points 11346

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

2 votes

WireShark fonctionne sur WinCap ou d'autres systèmes de capture, vous devez avoir un chipset basé sur atheros pour qu'il fonctionne je pense, pourquoi ne pas simplement installer chrome et appuyer sur Ctrl+Shift+J puis cliquez sur le XHR et le nom du fichier, puis voir les en-têtes et les données.

0 votes

J'ai essayé wireshark mais il ne semble pas capter mon trafic Curl POST sortant.

0 votes

J'ai supposé que vous travailliez sur un serveur local, est-ce le cas ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X