WebサーバーからのHTTP応答で返されるさまざまなステータスコードの処理をテストするために、作成したクライアントアプリケーションコードをテストする必要があります。
Fiddler 2(Web Debugging Proxy)がインストールされており、このアプリケーションを使用して応答を変更する方法があると信じていますが、その方法を見つけるのに苦労しています。これは、クライアントコードとサーバーコードの両方を変更せずに残すことができるため、最も便利な方法です。
サーバーからクライアントに送信されるHTTP応答をインターセプトし、クライアントに到達する前にステータスコードを変更したいので、だれでも支援できますか?
どんなアドバイスも大歓迎です。
わかりましたので、クライアント/サーバーのトラフィックを既に監視できると思います。応答にブレークポイントを設定し、それをいじってからクライアントに送信します。
これを行うには、いくつかの異なる方法があります。
ブレークポイントで停止した応答を取得したら、それをダブルクリックしてインスペクターで開きます。いくつかのオプションがあります:
別の方法は、FiddlerのAutoResponderタブ(右側のパネル)を使用することです。これにより、文字列に一致する任意のURIへの要求をキャッチし、ファイルから「缶詰」応答を提供できます。ファイルには、ヘッダーとペイロードの両方を含めることができます。このアプローチの利点は、FiddlerScriptを記述する必要がなく、ブレークポイントを介して各リクエストを手動で処理する必要がないことです。
以下に示すように、Fiddlerでルールを設定します(一致しないリクエストのパススルーを有効にしないと、他のすべてのhttpリクエストが失敗します)。
この例では、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がハングします。あなたのマイレージは異なる場合があります。
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";
}
}