webentwicklung-frage-antwort-db.com.de

Wie kann ich mit Fiddler den Statuscode in einer HTTP-Antwort ändern?

Ich muss einige Clientanwendungscodes testen, die ich geschrieben habe, um die Behandlung verschiedener Statuscodes zu testen, die in einer HTTP-Antwort von einem Webserver zurückgegeben werden.

Ich habe Fiddler 2 (Web Debugging Proxy) installiert, und ich glaube, es gibt eine Möglichkeit, Antworten mit dieser Anwendung zu ändern. Dies wäre der bequemste Weg, da ich sowohl Client- als auch Servercode unverändert lassen kann.

Kann jemand helfen, da ich die HTTP-Antwort, die vom Server an den Client gesendet wird, abfangen und den Statuscode ändern möchte, bevor er den Client erreicht?

Jeder Rat wäre sehr dankbar.

39
w5m

Ok, ich gehe davon aus, dass Sie Ihren Client/Server-Verkehr bereits überwachen können. Sie möchten einen Haltepunkt für die Antwort festlegen und dann mit ihr klingeln, bevor Sie ihn an den Client senden.

Hier sind ein paar verschiedene Möglichkeiten, dies zu tun:

  1. Regeln> Automatische Haltepunkte> Nach Antworten
  2. Geben Sie im Feld quickexec (das schwarze Feld unten) "bpafter yourpage.svc" ein. Jetzt stoppt Fiddler an einem Haltepunkt, bevor alle Anforderungen an eine URL gesendet werden, die "yourpage.svc" enthält. Geben Sie "bpafter" ohne Parameter ein, um den Haltepunkt zu löschen.
  3. Programmgesteuert manipulieren Sie die Antwort mit FiddlerScript. Die beste Dokumentation für FiddlerScript finden Sie auf der offiziellen Website: http://www.fiddler2.com/Fiddler/dev/

Sobald Sie eine Antwort am Haltepunkt angehalten haben, doppelklicken Sie einfach darauf, um sie in den Inspektoren zu öffnen. Sie haben jetzt einige Optionen:

  1. Direkt neben der grünen Schaltfläche Ausführen bis zum Abschluss (auf die Sie klicken, um die Antwort zu senden) befindet sich eine Dropdown-Liste, in der Sie einige Standardantworttypen auswählen können.
  2. Oder ändern Sie im Kopfzeileninspektor den Antwortcode und die Nachricht im Textfeld oben.
  3. Oder klicken Sie auf den "Raw" -Inspektor und legen Sie die Rohantwort an, um beliebige Dinge zu tun. Eine gute Möglichkeit zu sehen, was Ihr Client macht, wenn er eine fehlerhafte Antwort erhält, die Sie wahrscheinlich aus Versehen testen werden
69
chrisbro

Eine andere Alternative ist die Verwendung der Registerkarte AutoResponder von Fiddler (im rechten Bedienfeld). Auf diese Weise können Sie eine Anforderung an einen beliebigen URI abrufen, der mit einer Zeichenfolge übereinstimmt, und eine "eingemachte" Antwort aus einer Datei liefern. Die Datei kann sowohl Header als auch Payload enthalten. Der Vorteil dieses Ansatzes ist, dass Sie kein FiddlerScript schreiben müssen und Sie müssen nicht jede Anforderung manuell über einen Haltepunkt behandeln.

Sie würden die Regel wie folgt in Fiddler einrichten (stellen Sie sicher, dass Sie Durchlauf für nicht übereinstimmende Anforderungen aktivieren, andernfalls schlagen alle anderen HTTP-Anforderungen fehl.

 Fiddler autoresponder setup In diesem Beispiel erhält jede Anforderung, deren URI "fooBar" enthält, die festgelegte Antwort. Das Format der Datei hängt von Ihren APIs ab (Sie können Ihren Browser verwenden, um eine "echte" Antwort abzufangen und darauf aufbauend), aber meine sah wie folgt aus:

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}}]}

Ich fand heraus, dass am Ende der letzten Zeile (d. H. Nach dem Json) ein Wagenrücklauf erforderlich war und dass der Content-Length-Header mit der Anzahl der Zeichen im Json übereinstimmen musste, da sonst die Webapp hängen blieb. Ihre Laufleistung kann variieren.

7
russthegibbon

Erstellen Sie eine FiddlerScript-Regel. Hier ist, was ich verwendet habe, um eine lokale Kopie einer Website zu erstellen, die absichtlich 403 auf jeder Seite verwendet, um HTTrack/WGET zu vereiteln. https://Gist.github.com/JamoCA/22db8d68a9a2fb20cb04a853601853

/* 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