web-dev-qa-db-ja.com

Fiddlerを使用してHTTP応答のステータスコードを変更するにはどうすればよいですか?

WebサーバーからのHTTP応答で返されるさまざまなステータスコードの処理をテストするために、作成したクライアントアプリケーションコードをテストする必要があります。

Fiddler 2(Web Debugging Proxy)がインストールされており、このアプリケーションを使用して応答を変更する方法があると信じていますが、その方法を見つけるのに苦労しています。これは、クライアントコードとサーバーコードの両方を変更せずに残すことができるため、最も便利な方法です。

サーバーからクライアントに送信されるHTTP応答をインターセプトし、クライアントに到達する前にステータスコードを変更したいので、だれでも支援できますか?

どんなアドバイスも大歓迎です。

43
w5m

わかりましたので、クライアント/サーバーのトラフィックを既に監視できると思います。応答にブレークポイントを設定し、それをいじってからクライアントに送信します。

これを行うには、いくつかの異なる方法があります。

  1. ルール>自動ブレークポイント>応答後
  2. Quickexecボックス(下部の黒いボックス)に「bpafter yourpage.svc」と入力します。これで、Fiddlerは、「yourpage.svc」を含むURLへのすべてのリクエストの前にブレークポイントで停止します。パラメータなしで「bpafter」と入力して、ブレークポイントをクリアします。
  3. FiddlerScriptを使用して、プログラムで応答を改ざんします。 FiddlerScriptの最良のドキュメントは公式サイトにあります: http://www.fiddler2.com/Fiddler/dev/

ブレークポイントで停止した応答を取得したら、それをダブルクリックしてインスペクターで開きます。いくつかのオプションがあります:

  1. 緑色の[完了まで実行]ボタン(クリックして応答を送信するボタン)の隣に、いくつかのデフォルトの応答タイプを選択できるドロップダウンがあります。
  2. または、ヘッダーインスペクターで、上部のテキストボックスの応答コードとメッセージを変更します。
  3. または、「Raw」インスペクターをクリックし、生の応答をいじって任意の処理を行います。また、クライアントが誤った形式の応答を受け取ったときにクライアントが何をするかを確認するための良い方法であり、おそらく誤ってテストするでしょう:)
72
chrisbro

別の方法は、FiddlerのAutoResponderタブ(右側のパネル)を使用することです。これにより、文字列に一致する任意のURIへの要求をキャッチし、ファイルから「缶詰」応答を提供できます。ファイルには、ヘッダーとペイロードの両方を含めることができます。このアプローチの利点は、FiddlerScriptを記述する必要がなく、ブレークポイントを介して各リクエストを手動で処理する必要がないことです。

以下に示すように、Fiddlerでルールを設定します(一致しないリクエストのパススルーを有効にしないと、他のすべてのhttpリクエストが失敗します)。

Fiddler autoresponder setup この例では、URIに「fooBar」が含まれる要求はすべて、定型応答を取得します。ファイルの形式はAPIによって異なります(ブラウザを使用して「実際の」応答をインターセプトし、それに基づいて処理できます)が、次のようになります。

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

最後の行の終わり(つまり、jsonの後)に改行が必要であり、Content-Lengthヘッダーがjsonの文字数と一致する必要があることがわかりました。そうしないと、webappがハングします。あなたのマイレージは異なる場合があります。

8
russthegibbon

FiddlerScriptルールを作成します。これは、HTTrack/WGETを阻止するためにすべてのページで403を意図的に使用していたWebサイトのローカルコピーを生成するために使用したものです。 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