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

87

Je crée une application d'automatisation Web Curl et j'ai du mal à ne pas obtenir le résultat souhaité de mon action POST, j'ai du mal à comprendre comment je peux afficher la demande POST complète que j'envoie (avec en-têtes), je J'ai cherché à ce sujet, mais tout ce qui apparaît, ce sont 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 ne semble mentionner.

Je sais que je peux afficher le résultat d'une requête curl en utilisant quelque chose comme ça (pardonnez-moi si ma syntaxe est désactivée, j'ai déjà arrêté ma machine virtuelle avec mon ide et mon code pour faire référence à

 $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

Meule
la source

Réponses:

83

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_HEADERdans votrecurl_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.

RobertPitt
la source
4
J'ai essayé cela, mais il sort juste un tableau du POST donc il ne montre pas les en-têtes exacts, 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
5
La réponse n'est pas complète. Avant que la demande ne soit exécutée, vous devezcurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
cela ne montre que ce que le serveur a renvoyé. cela ressemble à curl_setopt ($ ch, CURLOPT_VERBOSE, vrai); vous permettra de voir ce que vous envoyez au serveur.
Steven Teo
169

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
Joseph Lust
la source
6
Comment afficher également les données POST? Ie celui ajouté par curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu
@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 du formulaire de POST sont envoyées sous forme de «données de formulaire» et non d'en-têtes, c'est pourquoi ce qui précède ne les affiche pas. Si vous avez vraiment besoin de voir ce qu'il y a sur le fil, essayez WireShark.
Joseph Lust
10

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);
Nassim Aouragh
la source
6

Vous pouvez vous 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 écrit sur comment faire une demande

Liutas
la source
Merci pour le post, je suppose que je ne comprends pas tout à fait cela car c'est une bibliothèque différente de curl, non? Existe-t-il un moyen de faire cela avec juste curl? Sinon, je vais chercher à le faire de cette façon, c'est juste que je ne suis pas familier avec les fputs
Rick
C'est en fait une fonctionnalité native de php
SSH ce
1
C'est une bonne réponse car elle expose une sorte de requête brute. On m'a toujours appris à utiliser cURL qui est une bibliothèque qui doit parfois être installée et qui n'est pas toujours disponible.
Altimus Prime
2

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

Greg0ire
la source
2
WireShark fonctionne sur WinCap ou un autre système de capture, vous devez avoir un chipset basé sur atheros pour que cela fonctionne, je pense, pourquoi ne pas simplement installer chrome et appuyer Ctrl+Shift+Jsur puis cliquer sur le XHRbouton et le nom du fichier, puis voir les en-têtes et les données.
RobertPitt
J'ai essayé WireShark mais il ne semble pas prendre mon trafic Curl POST sortant
Rick
J'ai supposé que vous travailliez sur un serveur local, est-ce le cas?
greg0ire
Robert, j'essaie de faire ce que vous avez dit dans Chrome, mais ça ne fait rien quand je fais Ctrl + Shift + 3, je cherche des informations à ce sujet mais je n'arrive pas à trouver quelque chose de pertinent, quelle fonctionnalité de chrome est-ce un accès? Merci
Rick
Ok, j'ai trouvé ceci concernant l'affichage des en-têtes dans Chrome: google.com/support/forum/p/Chrome/ ... Je crois que c'est Ctrl + Shift + i pour y accéder
Rick