
Inspecter une requête HTTP : curl, message brut et HAR
Formatez un Copy as cURL, analysez une requête ou une réponse HTTP brute et lisez un export HAR dans votre navigateur : rien n’est envoyé ni rejoué.
Une requête, trois façons de la lire : commande cURL, message brut, fichier HAR
Quand une intégration d’API se comporte mal, la preuve est presque toujours un échange HTTP que l’on peut copier depuis les DevTools. Le problème, c’est la forme sous laquelle il arrive : le Copy as cURL de Chrome tient en une seule ligne interminable, une réponse collée est un bloc d’en-têtes suivi d’un corps, et un export HAR est un fichier JSON de plusieurs centaines d’entrées. Le formateur cURL transforme un Copy as cURL ou un Copy as fetch en cURL multiligne lisible, ou en HTTP/1.1, fichier .http, fetch JavaScript, Python requests, Go ou PHP. Le parseur de message HTTP lit une requête brute, une réponse ou un bloc d’en-têtes, garde les en-têtes en double et met en forme un corps JSON. L’inspecteur HAR ouvre toute une session enregistrée, la réduit à l’appel qui échoue et recopie cet appel en cURL. Les trois outils travaillent sur du texte collé, dans votre navigateur : FastMinify n’envoie jamais la requête, ne va jamais chercher l’URL collée et n’a ni exécuteur ni proxy, donc un jeton présent dans le collage reste dans votre onglet. Ce guide explique quel outil répond à quelle question, comment déboguer une requête qui marche dans le navigateur mais pas dans votre script, les erreurs qui font fuiter un identifiant ou qui induisent en erreur, l’anatomie d’un message HTTP, puis les mêmes vérifications dans un terminal et en Node. Les outils se trouvent dans le hub des outils HTTP.
Quel outil pour quelle question
Ces trois outils servent à lire, traduire et partager un échange HTTP. Ils ne l’exécutent pas.
Chaque outil s’arrête là où un autre commence. Passez la main aux outils voisins ou à votre propre code.
Déboguer un appel d’API à partir d’une requête copiée
Collez le Copy as cURL dans le formateur cURL et lisez-le ligne par ligne : il contient tout ce que le navigateur a ajouté, pas seulement ce dont votre code a besoin.
Collez la réponse dans le parseur de message HTTP. La ligne de statut, le tableau d’en-têtes et le corps sont présentés séparément.
Ouvrez l’export dans l’inspecteur HAR et réduisez la liste avant de lire le moindre détail.
Quatre erreurs qui font fuiter un identifiant ou vous égarent
Un Copy as cURL issu d’une session authentifiée contient vos en-têtes Cookie et Authorization : quiconque lit le ticket peut rejouer l’appel à votre place. L’interrupteur Retirer les secrets retire de la copie Cookie, Authorization, Referer, sec-ch-* et les valeurs de -u et -b. Il est désactivé par défaut dans le formateur et dans le Copy as cURL du parseur, et activé par défaut dans l’inspecteur HAR. Il ne traite que les en-têtes : un jeton dans la chaîne de requête (?access_token=), dans le corps, dans un en-tête personnalisé comme X-Api-Key ou dans le corps d’une réponse reste exactement où il était. Relisez la sortie avant de la coller et changez tout ce qui est déjà sorti de votre machine. Le détecteur de secrets aide à repérer une clé que vous n’aviez pas vue.
La Durée de l’inspecteur HAR est celle de l’entrée la plus longue, pas le temps de chargement de la page, et Taille additionne les tailles de corps enregistrées dans chaque entrée. Ils répondent à « quel appel a été le plus lent » et « combien de données ont circulé », pas à ce que mesure Lighthouse. Les requêtes s’exécutent en parallèle : la somme des durées n’est pas non plus le temps de la page. Les réponses en cache et les corps compressés font différer les tailles de celles affichées au pied du panneau Réseau.
Le formateur comprend le sous-ensemble de cURL produit par les DevTools et ignore le reste sans le dire. Des options comme -L, -s, -k, --insecure, -v et -o disparaissent de la sortie : une commande qui comptait sur -L pour suivre une redirection ou sur -k pour ignorer le certificat perd ce comportement à la traduction. Certaines entrées sont refusées avec un message clair : envois multipart (-F), fichiers -T, corps @fichier, {{variables}} de REST Client, fichiers .http à plusieurs requêtes, snippets axios, appels fetch avec gabarits de chaîne ou variables non liées. Une réponse collée n’est pas une requête : il n’y a rien à transformer en cURL.
Plusieurs sorties ré-indentent un corps JSON : le cURL multiligne, les sorties HTTP/1.1 et .http, le fetch JavaScript, et Python requests, qui le transforme en littéral json=. Le cURL sur une ligne garde le corps tel que collé. C’est sans conséquence pour la plupart des API, mais fatal quand le serveur vérifie une signature calculée sur les octets exacts, comme le font souvent les points d’entrée de webhooks : un seul espace ajouté et le HMAC ne correspond plus. Le guide du hash et du HMAC explique comment ces signatures sont construites.
Anatomie d’un message HTTP et ce que regarde chaque outil
Un message HTTP/1.1 est du texte brut (RFC 9112) dont le sens est défini par la RFC 9110. Requête et réponse partagent la même disposition.
Les outils convertissent de l’une à l’autre, d’où le fait qu’une requête copiée puisse devenir n’importe laquelle.
Un court ordre de lecture évite la plupart des séances de débogage interminables.
Les trois outils, pas à pas
Le formateur cURL reformate au fil du collage, sans bouton Envoyer. Dans Chrome, faites un clic droit sur la requête dans l’onglet Réseau, puis Copier, puis Copy as cURL (bash) (libellé traduit selon la langue de Chrome).
Collez la commande
Un Copy as cURL, un Copy as fetch, un fichier .http à requête unique ou une requête HTTP/1.1 brute sont détectés. Les retours à la ligne avec continuation sont joints pour vous.
Choisissez le langage et la disposition
cURL, HTTP/1.1, .http, fetch JavaScript, Python requests, Go net/http ou PHP curl, en disposition multiligne ou sur une ligne.
Activez Retirer les secrets avant de partager
Il retire de la copie Cookie, Authorization, Referer, sec-ch-* et les valeurs de -u et -b. Chaînes de requête et corps restent intacts.
Copiez ou téléchargez le résultat
Chaque langage a son nom de fichier (formatted-curl.sh, formatted-request.http, formatted-requests.py, etc.). Une erreur d’analyse dit ce qui a été refusé et pourquoi.
Le parseur de message HTTP présente un message collé sous forme de ligne de départ, de tableau d’en-têtes et de corps.
Collez le message
Une requête, une réponse, un bloc d’en-têtes seuls ou la sortie de curl -v. Les fins de ligne LF et CRLF fonctionnent toutes deux.
Vérifiez le type détecté
L’outil l’étiquette requête HTTP, réponse HTTP ou en-têtes seuls, puis affiche le nombre d’en-têtes. Les doublons restent sur des lignes distinctes.
Lisez le corps
Un corps JSON est mis en forme par défaut, avec un interrupteur pour le voir brut. Les corps fragmentés ne sont pas réassemblés.
Copiez une requête en cURL
Il faut une requête avec une URL absolue ou un en-tête Host. Avec le seul Host, le schéma est deviné : http pour localhost, 127.0.0.1 ou le port 80, https sinon. L’interrupteur Assainir la copie est désactivé par défaut.
L’inspecteur HAR lit le fichier dans votre onglet et ne va jamais chercher les URL qu’il liste.
Exportez le HAR
Dans le panneau Réseau, utilisez l’icône de téléchargement (Export HAR). Les exports de Chrome, Firefox, Edge, Charles et HTTP Toolkit s’ouvrent jusqu’à 50 Mo ; au-delà de 20 Mo, le filtrage peut être lent.
Déposez le fichier ou collez le JSON
Un fichier .har ou .json, ou le JSON HAR 1.2 lui-même. Le bouton d’exemple charge une petite capture pour essayer les filtres.
Réduisez la liste
Pastilles de type (XHR, JS, CSS, Img, Media, Font, Doc, Autre, Erreurs), méthode, classe de statut et recherche « URL contient ». Le type vient de l’entrée quand Chrome l’enregistre, ou du type MIME de la réponse.
Ouvrez un appel et extrayez-le
Lisez les en-têtes de requête et de réponse, le payload et l’aperçu du corps. Copier cURL, Copier HTTP/1.1 ou Copier l’URL, ou téléchargement du fichier : avec Sanitizer les secrets activé, il est écrit sous le nom sanitized.har, sans les en-têtes Cookie, Set-Cookie, Authorization, Referer et sec-ch-* ni les tableaux de cookies.
Quelques limites à connaître avant de s’y fier.
Les mêmes vérifications dans un terminal et en Node
Quand vous pouvez lancer une commande, curl montre les mêmes données que celles que présente le parseur. Gardez les jetons dans des variables d’environnement, pas dans la commande que vous collez dans un ticket.
Exemple de base
Un HAR est du JSON : quelques lignes suffisent pour lister les appels en échec. Contrairement au compteur Erreurs de l’inspecteur, ce filtre garde aussi le statut 0.
Exemple de base
Prenez la sortie de Copy as fetch, déplacez le secret dans une variable d’environnement et affichez ce qui revient. Les snippets générés par le formateur sont un point de départ du même genre.
Exemple de base
Rien à installer et rien d’envoyé : le formateur cURL, le parseur de message HTTP et l’inspecteur HAR couvrent la lecture, la traduction et le partage d’une requête. Les compromis : pas de rejeu, un sous-ensemble de cURL, pas de cascade des temps, et un nettoyage qui ne connaît que les en-têtes. Pour un vrai test, lancez l’appel dans un terminal, Postman ou votre propre suite de tests ; pour vérifier une spécification plutôt qu’un appel, utilisez le validateur OpenAPI.
Conclusion
Un échange HTTP n’est que du texte, et déboguer consiste surtout à le lire sous la bonne forme. Le formateur cURL rend un Copy as cURL lisible et portable, le parseur de message HTTP met en page une requête ou une réponse brute avec ses en-têtes en double et son corps JSON, et l’inspecteur HAR réduit une session enregistrée à l’appel qui a échoué. Aucun n’envoie quoi que ce soit : vous gardez la main sur ce qui quitte votre navigateur, ce qui compte puisque ces collages contiennent des cookies et des jetons. Retirez les secrets avant de partager, rappelez-vous que cela ne nettoie que les en-têtes, et lisez les compteurs pour ce qu’ils sont. Le hub des outils HTTP réunit les outils voisins pour les URL et les cookies.
Inspecter une requête dans votre navigateur
Articles connexes

Décodez l'en-tête et le payload d'un JWT ou signez un token de test dans votre navigateur : HS256, RS256, ES256, sans envoyer de secret à un tiers.

Longueur, entropie, symboles : générez un mot de passe robuste avec Web Crypto, dans votre navigateur, et sachez ce que l'outil ne garantit pas.

Testez une regex JavaScript, inspectez les groupes de capture et prévisualisez un remplacement $1 dans le navigateur, avant la mise en production.