Une extension WordPress tierce appelle une API de paiement, de synchronisation CRM ou de service de messagerie, et le résultat observé ne correspond pas à ce que la documentation de l’API laisse attendre. Sans visibilité sur ce qui part réellement du serveur, il ne reste que la spéculation : ajouter des error_log à des endroits choisis au hasard, espérer tomber sur la bonne ligne de code. mitmproxy propose une approche plus directe : intercepter physiquement chaque requête HTTP sortante du serveur de développement, avant qu’elle n’atteigne réellement le service distant, et en lire le contenu exact.
Ce n’est pas un outil de débogage PHP comme Xdebug : mitmproxy travaille au niveau réseau, entre le serveur WordPress et le monde extérieur, ce qui le rend utile indépendamment du langage ou de la bibliothèque HTTP utilisée par l’extension pour émettre ses appels.
Installer et lancer mitmproxy
pip install mitmproxy
mitmproxy --listen-port 8888
Cette commande démarre une interface en mode terminal listant chaque requête interceptée en temps réel. Une variante web, mitmweb, propose la même chose dans une interface de navigateur, plus confortable pour parcourir un historique de requêtes avec de longs corps JSON.
Rediriger le trafic sortant de WordPress vers le proxy

Sur un environnement de développement local, la variable d’environnement http_proxy et https_proxy peut être positionnée pour le processus PHP-FPM, ou WordPress peut être configuré pour passer par le proxy via les constantes dédiées aux requêtes HTTP internes :
define( 'WP_PROXY_HOST', '127.0.0.1' );
define( 'WP_PROXY_PORT', '8888' );
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost' );
Ces constantes s’appuient sur la classe interne WP_Http, utilisée par toutes les fonctions de requêtes HTTP de WordPress comme wp_remote_get() et wp_remote_post(). Toute extension qui utilise ces fonctions natives plutôt que cURL directement voit donc son trafic redirigé sans modification de son propre code.
Gérer le certificat HTTPS local
La plupart des API modernes exigent HTTPS, ce qui pose un problème d’interception classique : mitmproxy résout ce point en générant sa propre autorité de certification locale, à installer une seule fois sur la machine de développement :
# Après le premier lancement de mitmproxy
open ~/.mitmproxy/mitmproxy-ca-cert.pem
# Puis ajouter ce certificat aux autorités de confiance du système
Une fois ce certificat approuvé par le système d’exploitation, mitmproxy peut déchiffrer et afficher en clair le contenu des requêtes HTTPS, alors même qu’elles restent chiffrées de bout en bout vis-à-vis de tout autre observateur du réseau.
Lire une requête interceptée
Une fois une requête sélectionnée dans l’interface, mitmproxy affiche les en-têtes, le corps de la requête et celui de la réponse, dans un format lisible :
POST /v1/transactions HTTP/1.1
Host: api.paiement-exemple.com
Content-Type: application/json
Authorization: Bearer sk_test_...
{"amount": 4200, "currency": "eur", "customer": "cus_abc123"}
Dans un cas réel de débogage, on découvre parfois que l’extension envoie un montant mal converti (en euros au lieu de centimes), une clé d’API de test au lieu de production, ou un en-tête d’authentification manquant : autant de détails invisibles depuis l’interface WordPress elle-même, mais évidents une fois la requête brute affichée.
Points de vigilance
- mitmproxy affiche des données potentiellement sensibles (clés d’API, jetons d’authentification) : à réserver strictement à un environnement de développement, jamais à activer sur un site en production.
- Le certificat d’autorité local doit être retiré des autorités de confiance une fois l’usage terminé, pour éviter de laisser une porte d’interception active sur la machine.
- Certaines bibliothèques HTTP dans des extensions n’utilisent pas les constantes
WP_PROXY_*et nécessitent une configuration système du proxy plus large pour être interceptées.
Face à un comportement d’extension tierce inexplicable, la première question à se poser est toujours : qu’envoie-t-elle réellement, et pas seulement ce que sa documentation prétend envoyer.
En résumé
mitmproxy comble un angle mort que les outils de débogage PHP classiques ne couvrent pas : la vérité du contenu réseau échangé avec un service tiers. Pour diagnostiquer une extension qui communique mal avec une API externe, il évite les hypothèses et affiche directement ce qui part et ce qui revient, en clair, même en HTTPS.