Prise en main d’ApiCatcher

ApiCatcher capture, affiche et analyse le trafic HTTP/HTTPS et WebSocket d’une application, en local.

Cette page couvre le quotidien : certificats, filtres, historique, exports et documentation d’API. Réécriture, scripts, rejeu combiné et le reste sont dans les documents ci-dessous.

Pour aller plus loin :


Sommaire

  1. Certificats
  2. Filtres de trafic
  3. Sessions de capture et recherche
  4. Trouver un Cookie
  5. Exporter HAR, fichiers et une requête
  6. Documentation d’API générée
  7. API Scan

1. Certificats

1.1 Installer et faire confiance au certificat CA (indispensable pour HTTPS)

La plupart des échanges passent en HTTPS. Par défaut, ApiCatcher ne capture pas le HTTPS : sans certificat, rien n’est déchiffrable, donc rien d’utile à inspecter. Installez le CA et accordez-lui une confiance complète avant de capturer du HTTPS.

Deux façons de configurer un certificat :

  1. Utiliser le CA généré par ApiCatcher (recommandé dans la majorité des cas). Suivez les étapes ci-dessous.
  2. Importer le vôtre (certificat d’entreprise). Passez à 1.2.

CA par défaut :

  1. Touchez Installer le certificat dans l’app. iOS ouvre Safari et télécharge un profil de configuration.
  2. Allez dans Réglages → Général → VPN et gestion de l’appareil et installez le profil ApiCatcher.
  3. Puis Réglages → Général → Informations → Réglages des certificats, trouvez le certificat dont le nom commence par ApiCatcher CA, et activez la confiance complète.

Si ça coince

  • Timeouts ou codes de statut bizarres : en général, l’étape 3 n’a pas été faite.
  • Après une suppression / réinstallation de l’app, l’ancien profil ne sert plus. Supprimez-le dans Réglages et recommencez.

1.2 Certificats d’entreprise

Certaines applis internes ne font confiance qu’au CA de l’entreprise.

  • Rôle : importer un .pem ou .p12 fourni par l’orga et le lier à des hôtes internes (par ex. *.corp.internal) pour que la poignée TLS locale aboutisse.
  • À noter : importez ou modifiez pendant que la capture est arrêtée, puis relancez.

1.3 Certificat auto-signé

Sans CA d’entreprise, et si vous ne voulez pas celui d’ApiCatcher, importez le vôtre via le même flux « certificat d’entreprise ». Voir CA personnalisée.


2. Filtres de trafic

Système et applis en arrière-plan font beaucoup de bruit. Les filtres décident ce qui est enregistré.

  • Liste noire : les hôtes correspondants ne sont pas enregistrés. Liste blanche vide = tout le reste est enregistré.
  • Liste blanche : dès qu’elle contient une règle, seules les requêtes correspondantes sont enregistrées.
  • Joker : * fonctionne. *.example-api.com couvre les sous-domaines de test de cet hôte.

Si ça coince

  • Trafic manquant : l’hôte est peut-être en liste noire, ou la liste blanche est active sans cet hôte.
  • Utilisez une étoile simple (*.api.com). Pas d’expressions régulières ici.

3. Sessions de capture et recherche

Listes noire / blanche : ce qui est stocké. Ensuite, sur Historique, Session et recherche restreignent ce qui a déjà été capturé.

3.1 Session de capture

Une session = une passe de capture VPN. L’interface l’affiche par l’heure de début (yyyy-MM-dd HH:mm:ss). Pas de nom libre.

Démarrer la capture VPN crée une session. L’arrêt écrit l’heure de fin et le nombre de requêtes. Zéro requête = la session est supprimée. Pendant la capture, la fin affiche Capturing....

Le filtre Session de l’historique peut figer une passe ou afficher Tout. Le sélecteur montre aussi la plage, la durée, le nombre de requêtes et jusqu’à cinq hôtes vus. Supprimer une session enlève ses enregistrements.

3.2 Filtres

La barre de filtres de l’historique se configure. Configurer les filtres choisit les pastilles ; Réinitialiser les filtres les vide.

FiltreCorrespondance
SessionUne passe, ou toutes
HostHôte exact
App (UA)Nom d’app extrait du User-Agent, correspondance exacte
MéthodeGET / POST / PUT / DELETE / PATCH / OPTIONS / HEAD
SchémaHTTP / HTTPS / WS / WSS
TypeTous, HTML, JSON, XML, image, vidéo, audio, Protobuf (Content-Type)
Statut1xx–5xx, plus Sans réponse
Temps15 dernières minutes, dernière heure, aujourd’hui, 7 derniers jours, 30 derniers jours, plage perso

3.3 Recherche par mot-clé

Le champ cherche dans URL par défaut (placeholder : Search url...). Sous-chaîne, insensible à la casse. Ni regex, ni AND / OR.

Changez la cible via Historique … → Changer la cible de recherche :

CibleZone
URLURL de la requête
En-têtes de requêteNoms ou valeurs
En-têtes de réponseNoms ou valeurs
Body de requêteTexte du corps
Body de réponseTexte du corps

La recherche dans le body ne lit que les Content-Type texte (HTML / XML / JSON / texte brut / form-urlencoded / form-data). Images, vidéo et autres binaires sont ignorés.


4. Trouver un Cookie

Trouver un Cookie lit l’en-tête Cookie de la dernière requête vers un hôte. Pas de Set-Cookie, pas de fusion entre requêtes.

  1. Ouvrez Historique.
  2. En haut à droite … → Trouver un Cookie.
  3. Saisissez un Host (obligatoire ; liste déjà capturée ou saisie libre).
  4. Session optionnelle. Vide = toutes les sessions.
  5. Touchez Rechercher le Cookie.

Trouvé : Cookie récent et les paires. Sinon : Aucune requête avec Cookie.


5. Exporter HAR, fichiers et une requête

5.1 Export HAR

Fichier HAR 1.2 JSON, ouvrable dans Charles, Fiddler, Burp, etc. Nom du type apicatcher-export-yyyyMMddHHmmss.har.

EntréeContenuSuit les filtres en cours
Historique Exporter en HARToutes les requêtes du résultat filtré (pas seulement la page visible)Oui (Session, Host, temps, méthode, type, statut, mot-clé — comme la liste)
Sélection multiple puis partager / exporterRequêtes cochées seulementNon
Dossier de favoris → export HARRequêtes de ce dossierNon

L’UI indique : Total requests to export: N. You can modify filters to change the requests to export. Ne quittez pas la page pendant l’export.

5.2 Images / vidéo / audio

Depuis Historique, gestion des fichiers (icône dossier).

  • Trois familles : Image, Vidéo, Audio.
  • Restreindre par Session et Host.
  • Les morceaux Range / Content-Range sont fusionnés avant export.
  • Un fichier isolé, ou un ZIP groupé par hôte.

Dans le détail d’une requête, Exporter le fichier sur le corps requête / réponse ; le type suit le Content-Type.

5.3 Une seule requête

Dans le détail, Exporter la requête :

  • Raw : HTTP brut requête + réponse (.txt)
  • cURL : commande rejouable en terminal (.sh)
  • Markdown : aperçu Markdown (.md)

6. Documentation d’API générée

Dès qu’une requête HTTP/HTTPS éligible est capturée, l’app crée ou met à jour la doc en local, groupée par Host. Si le même endpoint revient, seuls les champs encore absents sont ajoutés ; les noms déjà là ne sont pas écrasés.

6.1 Périmètre et fusion

Uniquement les HTTP/HTTPS avec une réponse et un statut hors 301–308. Content-Type de requête JSON / XML / multipart/form-data / x-www-form-urlencoded, ou réponse JSON / XML. Images, vidéo, HTML, texte brut : ignorés.

Une requête modifiée par une règle de réécriture ou un script n’entre pas dans la doc. Clé : méthode + host + path (ex. GET + api.example.com + /v1/user).

Règles de fusion :

  • Query, Header, Body : ajouter les noms manquants seulement.
  • Exemple de body : mis à jour seulement si cette réponse est 200.
  • Cookie, User-Agent et autres en-têtes standard courants restent hors paramètres. Authorization, Content-Type et en-têtes custom sont conservés.

6.2 Export vers Postman / Apifox / Bruno

Où partir :

  • Export depuis la liste d’API d’un Host (tous les endpoints de cet hôte).
  • Export depuis le détail d’une API (cet endpoint seul).
  • Réglages → API favorites → Exporter pour les favoris uniquement.
CibleComment
Exporter vers PostmanClé API Postman → charger un Workspace → créer une Collection ou en choisir une
Exporter vers ApifoxClé API Apifox et ID projet ; ID dossier optionnel (vide = racine)
Exporter vers BrunoZIP avec bruno.json et .bru ; Open Collection dans Bruno

Captures d’écran pas à pas :


7. API Scan

API Scan relit le trafic déjà capturé : qualité, fuites évidentes, latence. Tout reste sur l’appareil.

7.1 Moteurs intégrés

  • Données sensibles : téléphone, numéro d’identité, e-mail, identifiants cloud (clé AWS, clé OpenAI) en clair.
  • Stacks : traces Java, Python ou SQL oubliées dans un corps de réponse.
  • Appels trop fréquents : intervalle moyen sous un seuil que vous fixez — souvent une boucle ou un retry mal parti.
  • Latence : p95 / p99 par endpoint.

7.2 Custom Scan

Un script JS pour vos règles métier.

  • null si la requête est saine. Sinon une note courte (≤200 caractères) : trop gros body, en-tête de sécu manquant, etc. Elle entre dans le rapport.

Si ça coince

  • Résultat vide : le périmètre (Host / Session) contient-il vraiment du JSON/API, ou seulement des statiques ? Chaque passe a un plafond d’enregistrements.