Réponse simulée
Chute peut renvoyer des données simulées pour les requêtes HTTP/HTTPS correspondantes. Pour les flux HTTP/2 déchiffrés, la réponse simulée est fournie localement sans transmettre la requête ; pour les requêtes HTTP/1.1 (proxy simple et MitM HTTP/1.1), la requête est tout de même envoyée au serveur réel, et la réponse réelle est remplacée par les données simulées avant d'atteindre le client. C'est utile pour les tests, le développement ou pour bloquer du contenu indésirable avec une réponse personnalisée.
Les règles de réponse simulée sont définies dans la section [Map Local].
Une seule règle de réponse simulée est appliquée par requête — la première dont le motif d'URL correspond.
Format de Map Local
Pour servir des réponses simulées depuis des fichiers locaux, du texte en ligne ou un contenu encodé en base64, avec un code d'état et des en-têtes choisis :
[Map Local]
^https://example\.com/api.* data="/path/to/mock-response.json"
^https://example\.com/page.* data="/path/to/page.html" header="SGVhZGVyOiBWYWx1ZQ=="
^https://example\.com/pixel.* base64="R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
^https://example\.com/api/v2.* data-type=text data="rate limited" status-code=429 header="Content-Type: text/plain|Retry-After: 30"
^https://example\.com/beacon.* data-type=tiny-gif
Remarque : l'expression régulière est recherchée n'importe où dans l'URL complète de la requête —
https://…une fois déchiffrée,http://…quand Chute est un simple proxy HTTP —, si bien que^https://example\.comcouvre déjà tous les chemins et chaînes de requête de cet hôte, et un.*final est inutile. Elle n'est jamais comparée au seul chemin : un motif comme^/apine correspond donc pas. Le motif conserve sa casse, si bien que\S,\D,\Wet\Bgardent leur sens ; la correspondance elle-même ignore la casse.
Un # ou un // en début de ligne ou après une espace ouvre un commentaire qui s'étend jusqu'à la fin de la ligne, sauf s'il se trouve entre guillemets doubles ; ; ne le fait jamais. Voir Commentaire.
Paramètres de Map Local
| Paramètre | Description | |||
|---|---|---|---|---|
data="/path/to/file" |
Chemin du fichier à servir comme corps de réponse, lu au moment de la requête — ou, avec data-type, le corps lui-même (voir ci-dessous). |
|||
| `data-type=file\ | text\ | base64\ | tiny-gif` | Façon de lire data= : file, un chemin (par défaut) ; text, la valeur est le corps ; base64, la valeur est décodée depuis base64 ; tiny-gif, un GIF 1×1 intégré sans data= (envoyé en image/gif sauf si header= fixe un Content-Type). |
base64="<encoded>" |
Contenu du corps de réponse encodé en base64 (identique à data-type=base64). |
|||
status-code=<code> |
Code d'état de la réponse simulée, de 200 à 599. Par défaut 200. Un code hors de cette plage rend toute la ligne invalide, et il est signalé comme une erreur de configuration. |
|||
| `header="Key: value\ | Key2: value2"` | En-têtes de réponse personnalisés. Les paires sont séparées par `\ | , et chaque paire est coupée au premier deux-points, si bien qu'une valeur peut elle-même contenir des deux-points (URL). L'ancienne forme base64 (lignesKey:Value\n` encodées en base64) reste acceptée. |
Une règle a besoin d'un corps :
data=(un fichier, ou du texte ou du base64 avecdata-type),base64=oudata-type=tiny-gif;data-type=textsansdata=donne un corps vide. Une règle qui ne peut pas produire son corps — aucun paramètre de corps, ou un fichier illisible — ne répond pas : la requête part vers le serveur, et les règles de réponse simulée suivantes ne sont pas essayées.Remarque : dans les deux formes, chaque en-tête est coupé au premier deux-points, et les espaces autour du nom et de la valeur sont supprimées ; une ligne sans deux-points est ignorée.
Les réponses que Chute génère lui-même — la Réponse simulée, la
responsed'un script, ainsi que les réponses et la page d'erreur de la Réécriture d'URL et des politiques REJECT — suivent HTTP : la réponse à une requête HEAD se limite à l'en-tête, avec le Content-Length qu'obtiendrait un GET, et une réponse de statut 204, 205 ou 304 ne porte ni corps ni Content-Length.
Variables de modèle
Avec data= ou base64=, le corps de la réponse prend en charge la substitution de variables de modèle :
| Variable | Remplacée par |
|---|---|
{{url}} |
L'URL complète de la requête, telle que la règle l'a vue |
{{host}} |
Nom d'hôte de la requête |
{{path}} |
Chemin d'URL relatif |
{{method}} |
Méthode HTTP |
{{ua}} |
Valeur de l'en-tête User-Agent |
Exemple de fichier de réponse simulée (response.json) :
{
"requested_url": "{{ "{{url}}" }}",
"host": "{{ "{{host}}" }}",
"method": "{{ "{{method}}" }}"
}
Remarque : pour les requêtes HTTPS, le déchiffrement MitM doit être activé pour le nom d'hôte correspondant. Les règles de réponse simulée visant du trafic HTTPS sans MitM seront ignorées. Une requête HTTP en clair ne reçoit de réponse simulée que lorsqu'elle parvient à Chute par son proxy HTTP ; le HTTP en clair qui arrive par l'interface TUN est transmis tel quel. Chute Android fait passer tout le trafic par TUN, sauf si Proxy HTTP système est activé dans les Réglages, ce qui fournit aux apps le proxy HTTP de Chute (Android 10 et ultérieur ; désactivé par défaut).
Remarque : le fichier derrière
data=est lu par l'appareil qui exécute Chute, au moment de la requête. Quand vous ajoutez une règle de réponse simulée depuis Chute Dashboard vers un iPhone, un chemin sur votre Mac n'a aucun sens pour le téléphone — mettez plutôt le contenu en ligne avecbase64=, ou servez le fichier depuis une URL et utilisez la Réécriture d'URL.