web-dev-qa-db-fra.com

Comment utiliser Fiddler pour modifier le code de statut dans une réponse HTTP?

J'ai besoin de tester le code d'application client que j'ai écrit pour tester sa gestion des divers codes d'état renvoyés dans une réponse HTTP d'un serveur Web.

Fiddler 2 (proxy de débogage Web) est installé et j'estime qu'il existe un moyen de modifier les réponses à l'aide de cette application, mais j'ai du mal à comprendre comment. Ce serait le moyen le plus pratique, car cela me permettrait de laisser le code client et le code serveur non modifiés.

Quelqu'un peut-il m'aider, car j'aimerais intercepter la réponse HTTP envoyée du serveur au client et modifier le code d'état avant qu'il atteigne le client?

Tout conseil serait très apprécié.

39
w5m

Ok, alors je suppose que vous êtes déjà capable de surveiller votre trafic client/serveur. Ce que vous voulez faire est de définir un point d'arrêt sur la réponse, puis de le manipuler avant de l'envoyer au client.

Voici différentes manières de le faire:

  1. Règles> Points d'arrêt automatiques> Après les réponses
  2. Dans la zone quickexec (la boîte noire en bas), tapez "bpafter yourpage.svc". Maintenant, Fiddler s'arrêtera à un point d'arrêt avant toutes les demandes d'URL contenant "yourpage.svc". Tapez "bpafter" sans paramètre pour effacer le point d'arrêt.
  3. Falsifier par programme la réponse à l’aide de FiddlerScript. La meilleure documentation pour FiddlerScript se trouve sur le site officiel: http://www.fiddler2.com/Fiddler/dev/

Une fois la réponse arrêtée au point d'arrêt, double-cliquez dessus pour l'ouvrir dans les inspecteurs. Vous avez maintenant deux options:

  1. Juste à côté du bouton vert Exécuter jusqu'à l'achèvement (sur lequel vous cliquez pour envoyer la réponse), un menu déroulant vous permet de choisir certains types de réponse par défaut.
  2. Ou, dans l'inspecteur En-têtes, modifiez le code de réponse et le message dans la zone de texte en haut.
  3. Ou, cliquez sur l'inspecteur "Raw" et décodez la réponse brute pour lui faire subir des actions arbitraires. C'est également un bon moyen de voir ce que votre client fait lorsqu'il reçoit une réponse malformée, que vous allez probablement tester accidentellement :)
69
chrisbro

Une autre alternative consiste à utiliser l'onglet AutoResponder de Fiddler (sur le panneau de droite). Cela vous permet d’attraper une demande à n’importe quel URI qui correspond à une chaîne et de servir une réponse «en conserve» à partir d’un fichier. Le fichier peut contenir à la fois des en-têtes et des données utiles. L'avantage de cette approche est que vous n'avez pas à écrire FiddlerScript ni à gérer chaque requête manuellement via un point d'arrêt.

Vous définissez la règle dans Fiddler comme indiqué ci-dessous (assurez-vous d'activer unmatched request passthrough, sinon toutes les autres requêtes http échoueront).

 Fiddler autoresponder setup Dans cet exemple, toute demande dont l'URI comprend "fooBar" obtiendra la réponse prédéfinie. Le format du fichier variera en fonction de vos API (vous pouvez utiliser votre navigateur pour intercepter une réponse "réelle" et la baser sur celle-ci), mais la mienne ressemblait à ceci:

HTTP/1.1 409 Conflict
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
Access-Control-Max-Age: 86400
Content-Type: application/vnd.api+json
Content-Length: 149
Date: Tue, 28 Mar 2017 10:03:29 GMT

{"errors":[{"code":"OutOfStock","detail":"Item not in stock","source":{"lineId":{"type":"Order line Number","id":"1"}},"meta":{"availableStock":0}}]}

J'ai constaté qu'il fallait un retour à la fin de la dernière ligne (c'est-à-dire après le json) et que l'en-tête Content-Length devait correspondre au nombre de caractères du json, sinon l'application Web se bloquerait. Votre kilométrage peut varier.

7
russthegibbon

Créez une règle FiddlerScript. Voici ce que j'ai utilisé pour générer une copie locale d'un site Web qui utilisait intentionnellement 403 sur chaque page pour contrecarrer HTTrack/WGET . https://Gist.github.com/JamoCA/22db8d68a9a2fb20cb04a85360185333

/* 20180615 Fiddler rule to ignore all 403 HTTP Status errors so WGET or HTTrack can generate local copy of remote website */
   SCENARIO: Changing the user agent or setting a delay isn't enough and the entire remote server is configured to respond w/403.
   CONFIGURE: Add below rule to FiddlerScript OnBeforeReponse() section.  Configure HTTrack/WGET/CRON to use proxy 127.0.0.01:8888 */

static function OnBeforeResponse(oSession: Session) {
  if (oSession.HostnameIs("TARGETHOSTNAME_FILTER.com") && oSession.responseCode == 403) {
    oSession.responseCode = 200;
    oSession.oResponse.headers.HTTPResponseCode = 200;
    oSession.oResponse.headers.HTTPResponseStatus = "200 OK";
  }
}
0
James Moberg