web-dev-qa-db-fra.com

Est-il possible de réécrire un code d'état avec Charles Proxy?

J'utilise Charles Proxy pour réécrire une réponse d'une API à des fins de test.

Si je fixe un point d'arrêt, je suis autorisé à réécrire complètement la réponse brute comme je le souhaite.

Cependant, si je veux l'automatiser via l'outil "Rewrite", je suis bloqué, il semble que vous ne puissiez pas modifier le code d'état:

Rewrite Rule panel

Savez-vous si je manque quelque chose?

53
Thomas

Une mise à jour: la version 3.8 de Charles Proxy vient d'être publiée, avec la possibilité de réécrire le statut. À partir de notes de version :

  • Outil de réécriture: autorise la réécriture de l'état de réponse

L'interface de réécriture de cette version ajoute un nouveau type de règle "Statut de réponse":

enter image description here

100
Marc Liyanage

À l'aide de Charles 3.8+, vous pouvez réécrire le code d'état.

Dans l'outil de réécriture, sélectionnez "Type: état de la réponse". Dans les champs de correspondance et de remplacement, sachez que Charles s'attend à ce que les statuts entrant et réécrit correspondent au format "\d{3} .*". Cela signifie que votre statut réécrit doit avoir une partie de message en plus du code d'état numérique.

Par exemple:

Valeur de correspondance: 201. *

Remplacer la valeur: 502 Bad Gateway

L'omission du message de la valeur de remplacement n'entraînera aucune réécriture de la ligne d'état. Vous pouvez voir les messages de sortie de l'outil de réécriture de Charles dans la section Notes du résumé de chaque appel.

14
Marc Kubischta

Ce n'est pas une réponse directe à votre question, mais comme indiqué dans mon commentaire ci-dessus, j'étais dans la même situation et j'ai trouvé une solution en utilisant un outil différent qui fonctionne bien pour moi.

Au lieu de Charles, je lance mitmproxy , spécifiquement mitmdump , avec ce court Python script de réécriture :

#!/usr/bin/env python

def response(context, flow):
    if '/somePath' not in flow.request.path:
        return

    flow.response.status_code = 404

Pour le connecter au proxy, je lance mitmdump comme ceci:

mitmdump -s /path/to/rewriting-script.py

et ça marche très bien.

Je suis sous OS X et j'ai configuré le proxy Web de l'interface réseau sur le port 8080 127.0.0.1.

9
Marc Liyanage

Édition finale: la réponse de Marc Liyanage est la plus correcte pour cette question maintenant.

Non, vous ne l'êtes pas, je ne pense pas qu'il soit possible de réécrire un code d'état.

Je ne peux pas ajouter ceci en tant que commentaire (nouvel utilisateur) mais une solution de contournement est:

  1. Créez des ressources sur un serveur qui renverra les codes dont vous avez besoin, ou trouvez ceux qui le font.
  2. Utilisez la fonction Map Remote, mappant à la ressource qui renvoie le code.

J'ai essayé d'utiliser Map Local, ce qui serait parfait pour cela, mais Charles ajoute son propre code d'état 200 OK à tous les fichiers retournés.

Modifier: vous pouvez également utiliser des points d'arrêt sur les réponses individuelles et modifier le code.

4
David Boydell