Comment utiliser Fiddler pour modifier le code D'état dans une réponse HTTP?

je dois tester un code d'application client que j'ai écrit pour tester sa gestion de divers codes d'état retournés dans une réponse HTTP à partir d'un serveur web.

J'ai Fiddler 2 (Web Debugging Proxy) installé et je crois qu'il y a un moyen de modifier les réponses en utilisant cette application, mais j'ai du mal à trouver 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 aider comme je le voudrais intercepter la réponse HTTP envoyée du serveur au client et modifier le code d'état avant qu'elle n'atteigne le client?

Tout conseil serait grandement apprécié.

39
demandé sur w5m 2011-05-10 19:33:36

3 réponses

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

voici quelques façons différentes de le faire:

  1. Règles > Automatique Des Points D'Arrêt > Après Les Réponses
  2. dans la boîte quickexec (la boîte noire en bas) tapez " bpafter yourpage.svc". Maintenant Fiddler va s'arrêter à un point de rupture avant toutes les requêtes toute URL qui contient " votrepage.svc". Tapez "bpafter" sans paramètres pour effacer le point de rupture.
  3. par programme altérer 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 que vous avez une réponse arrêtée au point de rupture, il suffit de double-cliquer pour l'ouvrir dans les inspecteurs. Vous avez deux options:

  1. droite à côté du bouton vert exécuter Jusqu'à L'achèvement (que vous cliquez pour envoyer la réponse) il y a une liste déroulante qui vous permet de choisir certains types de réponse par défaut.
  2. Ou, sur les en-Têtes inspecteur, changer le code de réponse et le message dans la zone de texte en haut.
  3. ou bien, cliquez sur l'inspecteur " Raw " et gâchez la réponse raw pour lui faire des choses arbitraires. Aussi un bon moyen de voir ce que fait votre client quand il obtient une réponse malformée, que vous testerez probablement accidentellement :)
68
répondu chrisbro 2011-05-12 21:44:00

une Autre alternative est d'utiliser Fiddler's Répondeur automatique onglet (sur le panneau de droite). Cela vous permet de saisir une requête à 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 les en-têtes et la charge utile. L'avantage de cette approche est que vous n'avez pas à écrire FiddlerScript et vous n'avez pas à traiter chaque demande manuellement via un point d'arrêt.

vous définiriez la règle dans Fiddler comme indiqué ci-dessous (assurer vous activez demandes non appariées passthrough sinon, toutes les autres requêtes http échouera).

Fiddler autoresponder setup Dans cet exemple, toute requête dont L'URI inclut "fooBar" recevra la réponse en boîte. Le format du fichier varie en fonction de votre Api (vous pouvez utiliser votre navigateur pour intercepter une "vraie" réponse, et que) mais le mien ressemblait le suivant:

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 trouvé qu'il avait besoin d'un retour chariot à la fin de la dernière ligne (i.e. après le json), et que L'en-tête Content-Length devait correspondre au nombre de caractères dans le json, sinon le webapp serait suspendu. Votre kilométrage peut varier.

5
répondu russthegibbon 2017-03-28 10:49:30

créer 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
répondu James Moberg 2018-06-15 19:23:52