DEV

Telerik Fiddler「FiddlerScript」(主なメソッド一覧と実装例)

11月 5, 2021

fiddler
Telerik Fiddler「FiddlerScript」(主なメソッド一覧と実装例)

ここでは、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の起動方法

FiddlerScriptを起動するには、以下の2通りの方法があります:

  • FiddlerScript Editorを使用する方法(こちらがおすすめ)
  • Fiddler画面内のFiddlerScriptタブを使用する方法

FiddlerScript Editorを使用する方法(こちらがおすすめ)

メニュー→「Rules」→「Customize Rules…」を選択するか、Fiddler上で「Ctrl」キー+「R」キーを入力すると、FildderScript Editorが開きます。FiddlerScript Editorの方が、ショートカットキーなどが使えるため、スクリプトの編集が簡単にできます。FiddlerScript 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内の一番上にカーソルが移動するなど、あまり使い勝手はよくありません。

Fiddler画面内のFiddlerScriptタブ

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ボックス(左下の黒枠)と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機能の説明は以上です。

【Fiddler関連記事一覧】

-DEV