ここでは、Telerik Fiddler Classic(以下、Fiddler)の「FiddlerScript機能」で使用する「主なメソッド一覧」と「実装例」について、詳細に説明します。
Fiddlerとはそもそも何か、また、Fiddlerの使い方全般に関しては、以下の記事をご確認ください:
FiddlerScriptは、HTTP(S)リクエスト・レスポンスをプログラム的に修正できる様にした機能です。Fiddlerの他の機能(Composer、AutoResponder、Filters)の機能は、FiddlerScriptを使用すれば、プログラム的に実装できます。また、FiddlerのUI(ユーザインターフェイス)も実装できます。
FiddlerScriptは、JScript.NET(JavaScriptの.NET版)かC#で実装できる様になっています。デフォルトでは、JScript.NETが選択されています。
Fiddler Scriptのプログラミング言語の設定
Fiddler画面左上の「Tools」→「Options...」を選択して、「Options」ダイアログを表示します。「Scripting」タブを選択し、「Language」プルダウンで「Jscript.NET」か「C#」を選択し、「OK」ボタンを押します。今回は、JScript.NETで進めます。
FiddlerScriptの起動方法
FiddlerScriptを起動するには、以下の2通りの方法があります:
- FiddlerScript Editorを使用する方法(こちらがおすすめ)
- Fiddler画面内のFiddlerScriptタブを使用する方法
FiddlerScript Editorを使用する方法(こちらがおすすめ)
メニュー→「Rules」→「Customize Rules…」を選択するか、Fiddler上で「Ctrl」キー+「R」キーを入力すると、FildderScript Editorが開きます。FiddlerScript Editorの方が、ショートカットキーなどが使えるため、スクリプトの編集が簡単にできます。FiddlerScript Editorの使用をおすすめします。
FiddlerScript Editorを開くと、CustomRules.jsファイルが開きます。このファイルの上部に、FiddlerScript Editorをインストールする様にとコメント書きがありますが、最近では、FiddlerScript Editorが同梱されているため、別でインストールする必要はありません。
FiddlerScript EditorでCustomRules.jsを編集→保存すると、音が再生され、Fiddlerの画面最下部のステータスバーに英語で「CustomRules.js was loaded at '日時'」と出力されます。
Fiddler画面内のFiddlerScriptタブを使用する方法
FiddlerScript Editorを呼び出さなくても、以下の画面の様に、Fiddler画面内のFiddlerScriptタブで同じスクリプトを表示・編集できます。しかし、保存するためには、必ず「Save Script」ボタンを押さないといけなかったり、保存するとCustomRules.js内の一番上にカーソルが移動するなど、あまり使い勝手はよくありません。
FiddlerScriptで使用できるメソッド一覧
FiddlerScriptを開くと、Handlersクラスを実装したファイル(CustomRules.js)が表示されます。 CustomRules.jsには、コメントが豊富に含まれているため、それらを読むだけでも、実装方法を理解できます。Handlersクラスには、大きく分けると3種類のメソッド群があります。それぞれの詳細を説明します:
- アプリケーションイベント関連のメソッド
Fiddler自身が起動・終了等の変化がある際に実行 - セッションイベント関連のメソッド
1トラフィック(HTTP(S)リクエスト・レスポンス)毎に実行。キャプチャしたHTTP(S)リクエスト一覧の1行分のイベントです - OnExecActionメソッド
「QuickExec」ボックスに入力されたコマンドを実行
アプリケーションイベント関連のメソッド
アプリケーションイベント関連のメソッドを以下に記載します:
メソッド名 | 説明 |
static function OnBoot | Fiddlerの起動が完了した後実行するメソッド |
static function OnShutdown | Fiddlerが終了中に実行するメソッド |
static function OnAttach | Fiddlerをシステムプロキシとして登録する際に実行するメソッド |
static function OnDetach | Fiddlerをシステムプロキシから解除する際に実行するメソッド |
static function Main | FiddlerScriptの保存、ロード、コンパイル時に実行するメソッド。 FiddlerScriptを保存した際、「CustomRules.js was loaded at '日時'」と表示する処理は、 Mainメソッド内に記述されています |
セッションイベント関連のメソッド
セッションイベント関連のメソッドは、HTTP(S)リクエストヘッダ・ボディの読込、サーバからのHTTP(S)レスポンスヘッダ・ボディの読込までの各タイミングで、必要な処理を実行できる様になっています。
具体的には、以下4メソッドに分かれています。1回のセッションで、上から順にすべて実行します:
メソッド名 | 説明 |
static function OnPeekAtRequestHeaders | HTTP(S)リクエストヘッダを読み込んだ後、呼び出されます |
static function OnBeforeRequest | HTTP(S)リクエストヘッダ・ボディを読み込んだ後、呼び出されます。リクエストヘッダやボディの情報を修正したい場合は、ここに処理を記述します |
static function OnPeekAtResponseHeaders | サーバにHTTP(S)リクエスト情報を送信後呼び出されます。HTTP(S)レスポンスヘッダは読み込まれている状態です。レスポンスボディは読み込まれていません |
static function OnBeforeResponse | Youtubeの様なストリーミング以外は、HTTP(S)レスポンスがクライアント(ブラウザ等)に返る前に呼び出されます。レスポンスヘッダやボディの情報を修正したい場合は、ここに処理を記述します |
上記に加え、以下が呼び出される場合もあります:
メソッド名 | 説明 |
static function OnReturningError | Fiddlerがクライアントに(サーバに接続できない等の)エラーメッセージを返す場合に呼び出されます |
static function OnWebSocketMessage | WebSocketによるリクエスト送信・レスポンス受信時に呼び出されます |
OnExecActionメソッド
Fiddlerには、「QuickExec」ボックスという入力ボックスが存在します。ここにコマンドを入力すると、OnExecActionメソッドが実行され、メソッド内にあるコマンドを実行します。
static function OnExecAction(sParams: String[])
OnExecActionメソッドは、「QuickExec」ボックスに独自コマンドを処理する場合に実装します。以下に、「QuickExec」ボックス(左下の黒い部分)とFiddlerScript上のOnExecActionメソッドの一部を示します:
QuickExecメソッド内は、switch文で実装されているため、独自のコマンドを実装する場合は、case句を追加し、実装します。case句の最後には、trueを応答する様にしてください。
使えるコード例
CustomRules.js内にはサンプルコードが色々とあるので、それを読めば、どういうことができるかわかると思います。ここでは、よく使うものを紹介します:
特定のURLに対して処理を実行する
//特定のURL(例ではkennyshroffを含むURI)に対して処理をする場合
if ( oSession.uriContains("kennyshroff") ) {
/* kennyshroffがURIに含まれる場合の処理を記述 */
}
HTTP POST時に特定の処理を実行する
if ( oSession.HTTPMethodIs("POST") ) {
/* HTTP POSTメソッド によるリクエスト送信時の処理を記述 */
}
コードが実行されているか確認する方法(デバッグ用)
FiddlerObject.StatusText = " 現在の日時: " + (new Date()); //ステータスバーに現在の日時を表示
MessageBox.Show(" 現在の日時: " + (new Date()),"MessageBoxタイトル"); //MessageBoxを表示
FiddlerScript機能の説明は以上です。