605 votes

Comment puis-je voir les en-têtes de requête réalisés par curl lors de l'envoi d'une requête au serveur ?

Je veux voir les en-têtes de la requête faite par curl lorsque j'envoie une requête au serveur. Comment puis-je le vérifier ?

0 votes

Cette adresse peut être utile. helloacm.com/curl

1 votes

Vous pouvez l'utiliser pour tester run-node.com/now-use-curl-with-http-echo-com

625voto

lost-theory Points 4356

Je pense curl -v est le plus facile. Elle renvoie les en-têtes de la requête (lignes préfixées par '>') sans avoir à écrire dans un fichier :

$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
*   Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...

66 votes

Curl -v -D - stackoverflow.com -o /dev/null (afin de ne pas afficher tout le contenu du site, mais seulement les en-têtes)

25 votes

curl -Ivs http://example.com > /dev/null : -I pour un HEAD demande, -v pour afficher les en-têtes envoyés, -s pour masquer la barre de progression, > /dev/null pour n'afficher que la sortie -v, évitant ainsi la duplication.

0 votes

@PiotrekDe -D - était bien pensé, mais il ne m'était pas utile car il ne faisait que dupliquer les en-têtes que l'on retrouve dans la base de données. -v déjà affichée. Si vous voulez qu'ils soient non fixés pour la consommation automatique, ce serait peut-être mieux dans ce cas, mais je voulais seulement avoir un aperçu plus détaillé d'un problème.

145voto

Tash Pemhiwa Points 2800

Je sais que cette question date de plus d'un an, mais j'espère qu'elle pourra aider quelqu'un. Le code suivant écrit la requête dans un fichier texte appelé request.txt, que vous pouvez ensuite télécharger et/ou ouvrir pour voir à quoi ressemblait la requête.

$ch = curl_init();
$f = fopen('request.txt', 'w');
curl_setopt_array($ch, array(
    CURLOPT_URL            => $url, 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_STDERR         => $f,
));
$response = curl_exec($ch);
fclose($f);
curl_close($ch);

1 votes

C'est la meilleure réponse, car le fichier utilisé dans cette méthode contient tout ce qui est indiqué dans curl_getinfo() référencé ci-dessous, ainsi que plus de détails sur la requête et la réponse.

0 votes

Bien ! Est-il possible d'améliorer le code pour afficher également les données POST ? C'est à dire celles ajoutées par curl_setopt($ch, CURLOPT_POSTFIELDS, $postData) ;

0 votes

Cela n'a aucun sens. CURLOPT_STDERR fait écrire curl erreurs dans le cours d'eau $f et non les données de la demande. C'est pourquoi cela n'a pas fonctionné pour moi. À moins que j'aie oublié quelque chose d'important ?

73voto

Jonathan Leffler Points 299946
curl -D file url
curl --dump-headers file url

Voir :

curl --help | less

Le site --trace ou --trace-ascii sont correctes pour les en-têtes.

Par exemple, la demande :

curl --trace-ascii curl.trace --url http://www.google.com/

a produit la sortie initiale :

== Info: About to connect() to www.google.com port 80 (#0)
== Info:   Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050:  OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f:

Il a également reçu une réponse (une réponse 302, pour être précis mais sans importance) qui a été enregistrée.

12 votes

-D vous donne la réponse (tout comme -I, mais vers STDIN). La question posée concernait l'en-tête demande les en-têtes.

54voto

Daniel Stenberg Points 9116

Curl --trace-ascii dump.txt ...

CURLOPT_DEBUGFUNCTION si vous utilisez libcurl

2 votes

C'est très verbeux, mais cela vous montre tout ce que vous devez savoir.

1 votes

C'est la seule réponse qui m'a aidé. Un script externe définissait certains paramètres de proxy et cela m'a indiqué que le proxy était utilisé alors qu'il n'aurait pas dû l'être. La sortie Verbose ne mentionnait pas le proxy.

51voto

Kniganapolke Points 1820

La seule façon dont j'ai réussi à voir mes en-têtes sortants (curl avec php) était d'utiliser les options suivantes :

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

Obtenir vos informations de débogage :

$data = curl_exec($ch);
var_dump $data;
var_dump curl_getinfo($ch);

1 votes

Pour moi, il s'agit de l'en-tête de réponse et non de l'en-tête de sortie.

3 votes

var_dump $data renverra les en-têtes de la réponse ainsi que le corps de la réponse. La fonction var_dump curl_getinfo($ch) vous donnera les en-têtes de la requête.

2 votes

CURLOPT_HEADER est l'en-tête de la réponse - CURLINFO_HEADER_OUT est l'en-tête de la demande. C'est ce que demande l'OP :)

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