Je pense que curl -vc'est le plus simple. Il crachera les en-têtes de demande (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
...
curl -v -D - stackoverflow.com -o / dev / null (afin de ne pas afficher le contenu de tout le site, juste les en-têtes)
omnomnom
20
curl -Ivs http://example.com > /dev/null: -Ipour une HEADdemande, -vpour afficher les en-têtes envoyés, -spour masquer la barre de progression, > /dev/nullpour afficher uniquement la sortie -v, en évitant les doublons.
ici le
@PiotrekDe -D -était soigné, mais ne m'a pas été utile car il reproduisait simplement les en-têtes qui -vs'affichaient déjà. Si vous voulez qu'ils ne soient pas préfixés pour une consommation automatisée de la machine, alors ce serait peut-être mieux dans ce cas, mais je voulais seulement entrevoir plus en détail ce qu'était un problème.
Pysis
1
Il y a deux fonctionnalités très utiles du drapeau "verbeux": premièrement, il imprime également le processus de prise de contact TLS lors de l'accès au site Web via HTTPS, comme curl -v https://www.example.com; deuxièmement, il imprime également la CONNECTdemande si vous visitez le site via un proxy HTTP , tel que curl --proxy my-proxy:8080 http://www.example.com. Je crois que cela aiderait plus d'utilisateurs si quelques exemples de ces deux fonctionnalités sont mentionnés dans cette réponse.
Franklin Yu
1
TL; DR: Ne pas utiliser-I Dans le monde moderne, lorsque les gens demandent à voir les en-têtes, ils parlent probablement d'API. Et si vous utilisez cette -Imentalité "J'utilise pour voir les en-têtes avec mon serveur web Apache", vous allez perdre beaucoup de temps à développer une HEADméthode que vous avez probablement l'intention d'utiliser GET. Arrêtez de dire aux gens d'utiliser -I. S'ils le souhaitent HEAD, utilisez -X HEAD(TWSS)
Bruno Bronosky
141
La question n'a pas précisé si la commande de ligne de commande nommée curlétait destinée ou la bibliothèque cURL entière.
Le code PHP suivant utilisant la bibliothèque cURL utilise le premier paramètre comme méthode HTTP (par exemple "GET", "POST", "OPTIONS") et le deuxième paramètre comme URL.
C'est la meilleure réponse, car le fichier utilisé dans cette méthode contient tout dans curl_getinfo () référencé ci-dessous, ainsi que plus de détails sur la demande et la réponse.
Mike_K
3
Vous pouvez utiliser CURLOPT_WRITEHEADER pour les informations d'en-tête et CURLOPT_FILE pour l'ensemble du transfert
sturrockad
1
Gardez à l'esprit que si la connexion est refusée, les fichiers spécifiés avec CURLOPT_WRITEHEADER et CURLOPT_FILEsont vides.
vu le
34
Qui a dit quoi que ce soit à propos de l'utilisationphp?
Eddie B
1
J'ai voté pour votre réponse parce que bien que la question ne soit pas liée au php, votre réponse basée sur le php m'a pointé dans la bonne direction pour résoudre mon propre problème avec l'envoi d'un jeton de porteur. Je vous remercie. J'ai indiqué ma raison ici uniquement dans la vaine tentative de faire apparaître cette question dans les futures recherches google pour les développeurs php avec un problème similaire.
Chris
49
La seule façon dont j'ai réussi à voir mes en-têtes sortants (boucle avec php) était d'utiliser les options suivantes:
produit un fichier curl.tracequi commence comme suit:
== 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 obtenu une réponse (une réponse 302, pour être précis mais non pertinent) qui a été enregistrée.
Si vous souhaitez uniquement enregistrer les en- têtes de réponse , utilisez l' --dump-headeroption:
curl -D file url
curl --dump-header file url
Si vous avez besoin de plus d'informations sur les options disponibles, utilisez curl --help | less(il produit quelques centaines de lignes de sortie mais mentionne beaucoup d'options). Ou trouvez la page de manuel où vous trouverez plus d'explications sur la signification des options.
C'est très verbeux, mais vous montre certainement tout ce que vous devez savoir.
tripleee
27
J'ai essayé les réponses ici et j'ai trouvé que la plus utile et la plus simple n'était pas encore répertoriée comme réponse, mais c'est:
curl -v https://example.com/path
Cela imprime les en- têtes REQUEST ainsi que les en- têtes RESPONSE ainsi que d'autres utiles tels que le certificat SSL et si une connexion TCP existante a été réutilisée. le -vdrapeau peut être combiné avec d'autres drapeaux, bien sûr, comme pour suivre les redirections et demander l'authentification HTTP:
Une commande comme celle ci-dessous affichera trois sections: en-têtes de demande, en-têtes de réponse et données (séparés par CRLF). Il évite les informations techniques et le bruit syntaxique ajouté par curl.
Je sais que c'est un peu tard, mais ma méthode préférée pour le faire est netcatque vous obtenez exactement ce qui a été curlenvoyé; cela peut différer des options --traceou --trace-asciiqui n'afficheront pas correctement les caractères non ASCII (ils apparaissent simplement sous forme de points ou doivent être décodés).
Vous pouvez le faire très facilement en ouvrant deux fenêtres de terminal, dans le premier type:
nc -l localhost 12345
Cela ouvre un processus d'écoute sur le port 12345 de votre machine locale.
Dans la deuxième fenêtre du terminal, entrez votre commande curl, par exemple:
curl --form 'foo=bar' localhost:12345
Dans la première fenêtre du terminal, vous verrez exactement ce que curl a envoyé dans la demande.
Maintenant, bien sûr nc, n'enverra rien en réponse (à moins que vous ne le saisissiez vous-même), vous devrez donc interrompre la commande curl (control-c) et répéter le processus pour chaque test.
Cependant, c'est une option utile pour simplement déboguer votre demande, car vous n'impliquez aucun aller-retour nulle part, ou ne produisez pas de fausses demandes itératives quelque part jusqu'à ce que vous ayez bien compris; une fois que vous êtes satisfait de la commande, redirigez-la simplement vers une URL valide et vous êtes prêt à partir.
Vous pouvez faire de même pour n'importe quelle bibliothèque cURL, modifiez simplement votre demande pour pointer vers l' ncécouteur local jusqu'à ce que vous en soyez satisfait.
// Parse response and read cookies
preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);
// Build an array with cookies
foreach( $matches[1] as $index => $cookie )
$cookies[$cookie] = $matches[2][$index];
return $cookies;
} // end http_login_client
Merci, sans répondre exactement à la question, c'est exactement ce dont j'avais besoin. Le périphérique A fait une demande, le périphérique B vérifie qu'une demande a été effectuée.
Réponses:
Je pense que
curl -v
c'est le plus simple. Il crachera les en-têtes de demande (lignes préfixées par '>') sans avoir à écrire dans un fichier:la source
curl -Ivs http://example.com > /dev/null
:-I
pour uneHEAD
demande,-v
pour afficher les en-têtes envoyés,-s
pour masquer la barre de progression,> /dev/null
pour afficher uniquement la sortie -v, en évitant les doublons.-D -
était soigné, mais ne m'a pas été utile car il reproduisait simplement les en-têtes qui-v
s'affichaient déjà. Si vous voulez qu'ils ne soient pas préfixés pour une consommation automatisée de la machine, alors ce serait peut-être mieux dans ce cas, mais je voulais seulement entrevoir plus en détail ce qu'était un problème.curl -v https://www.example.com
; deuxièmement, il imprime également laCONNECT
demande si vous visitez le site via un proxy HTTP , tel quecurl --proxy my-proxy:8080 http://www.example.com
. Je crois que cela aiderait plus d'utilisateurs si quelques exemples de ces deux fonctionnalités sont mentionnés dans cette réponse.-I
Dans le monde moderne, lorsque les gens demandent à voir les en-têtes, ils parlent probablement d'API. Et si vous utilisez cette-I
mentalité "J'utilise pour voir les en-têtes avec mon serveur web Apache", vous allez perdre beaucoup de temps à développer uneHEAD
méthode que vous avez probablement l'intention d'utiliserGET
. Arrêtez de dire aux gens d'utiliser-I
. S'ils le souhaitentHEAD
, utilisez-X HEAD
(TWSS)La question n'a pas précisé si la commande de ligne de commande nommée
curl
était destinée ou la bibliothèque cURL entière.Le code PHP suivant utilisant la bibliothèque cURL utilise le premier paramètre comme méthode HTTP (par exemple "GET", "POST", "OPTIONS") et le deuxième paramètre comme URL.
Exemple d'utilisation:
Notez que les résultats sont presque identiques à la ligne de commande suivante
la source
CURLOPT_WRITEHEADER
etCURLOPT_FILE
sont vides.php?
La seule façon dont j'ai réussi à voir mes en-têtes sortants (boucle avec php) était d'utiliser les options suivantes:
Obtenir vos informations de débogage:
la source
var_dump $data
renverra les en-têtes de réponse ainsi que le corps de réponse. Le var_dumpcurl_getinfo($ch)
vous donnera les en-têtes de demande.CURLOPT_HEADER
est l'en-tête de réponse -CURLINFO_HEADER_OUT
est l'en-tête de la demande. C'est ce que le PO demande :)L'
--trace-ascii
option curl affichera les en-têtes de demande, ainsi que les en-têtes de réponse et le corps de réponse.Par exemple, la commande
produit un fichier
curl.trace
qui commence comme suit:Il a également obtenu une réponse (une réponse 302, pour être précis mais non pertinent) qui a été enregistrée.
Si vous souhaitez uniquement enregistrer les en- têtes de réponse , utilisez l'
--dump-header
option:Si vous avez besoin de plus d'informations sur les options disponibles, utilisez
curl --help | less
(il produit quelques centaines de lignes de sortie mais mentionne beaucoup d'options). Ou trouvez la page de manuel où vous trouverez plus d'explications sur la signification des options.la source
curl --trace-ascii {filename} ou utilisez un seul tiret au lieu du nom de fichier pour le faire envoyer à stdout:
CURLOPT_DEBUGFUNCTION si vous utilisez libcurl
Cela vous montre tout ce que curl envoie et reçoit, avec quelques informations supplémentaires.
la source
J'ai essayé les réponses ici et j'ai trouvé que la plus utile et la plus simple n'était pas encore répertoriée comme réponse, mais c'est:
Cela imprime les en- têtes REQUEST ainsi que les en- têtes RESPONSE ainsi que d'autres utiles tels que le certificat SSL et si une connexion TCP existante a été réutilisée. le
-v
drapeau peut être combiné avec d'autres drapeaux, bien sûr, comme pour suivre les redirections et demander l'authentification HTTP:J'espère que cela t'aides.
la source
Une commande comme celle ci-dessous affichera trois sections: en-têtes de demande, en-têtes de réponse et données (séparés par CRLF). Il évite les informations techniques et le bruit syntaxique ajouté par curl.
La commande produira la sortie suivante:
La description:
-vs
- ajouter des en-têtes (-v) mais supprimer la barre de progression (-s)2>&1
- combiner stdout et stderr en une seule stdoutsed
- modifier la réponse produite par curl en utilisant les commandes ci-dessous/^* /d
- supprimer les lignes commençant par '*' (info technique)/bytes data]$/d
- supprimer les lignes se terminant par 'bytes data]' (info technique)s/> //
- supprimer le préfixe '>'s/< //
- supprimer le préfixe «<»la source
Je sais que c'est un peu tard, mais ma méthode préférée pour le faire est
netcat
que vous obtenez exactement ce qui a étécurl
envoyé; cela peut différer des options--trace
ou--trace-ascii
qui n'afficheront pas correctement les caractères non ASCII (ils apparaissent simplement sous forme de points ou doivent être décodés).Vous pouvez le faire très facilement en ouvrant deux fenêtres de terminal, dans le premier type:
Cela ouvre un processus d'écoute sur le port 12345 de votre machine locale.
Dans la deuxième fenêtre du terminal, entrez votre commande curl, par exemple:
Dans la première fenêtre du terminal, vous verrez exactement ce que curl a envoyé dans la demande.
Maintenant, bien sûr
nc
, n'enverra rien en réponse (à moins que vous ne le saisissiez vous-même), vous devrez donc interrompre la commande curl (control-c) et répéter le processus pour chaque test.Cependant, c'est une option utile pour simplement déboguer votre demande, car vous n'impliquez aucun aller-retour nulle part, ou ne produisez pas de fausses demandes itératives quelque part jusqu'à ce que vous ayez bien compris; une fois que vous êtes satisfait de la commande, redirigez-la simplement vers une URL valide et vous êtes prêt à partir.
Vous pouvez faire de même pour n'importe quelle bibliothèque cURL, modifiez simplement votre demande pour pointer vers l'
nc
écouteur local jusqu'à ce que vous en soyez satisfait.la source
vider les en-têtes dans un fichier et la charge utile de la réponse dans un autre fichier
la source
Vous pouvez également utiliser l'
-I
option si vous souhaitez envoyer une demande HEAD et non une demande GET.la source
Voici mon client http en php pour faire des requêtes post avec des cookies inclus:
/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///
la source
Vous pouvez le voir en utilisant
-iv
la source
Vous pouvez utiliser Wireshark ou tcpdump pour consulter le trafic réseau (http aussi).
la source
Faites un exemple de demande à https://http-tools.appspot.com/reflect-http-request/some-unique-id et vérifiez ce que contient cette demande (en-tête de demande, corps de demande, paramètres de demande) par son URL de recherche correspondante https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Vous pouvez utiliser n'importe quelle chaîne à la place de
some-unique-id
, consultez https://http-tools.appspot.com pour plus de détails.la source