CData Software Blog

クラウド連携のCData Software の技術ブログです。

Fiddler の Automatic Breakpoints 機能の使い方:CData Driver から発行された API リクエスト・レスポンスを書き換える

f:id:sugimomoto:20210903132003p:plain

こんにちは。CData Software Japanリードエンジニアの杉本です。

以前 CData Driver のAPIリクエストをFiddlerでキャプチャする方法を紹介しました。

www.cdatablog.jp

これだけでも、個人的には十分な機能なんですが、Fiddler のいいところはそれぞれのAPIリクエストをBreakpoints 機能で止めて、リクエストやレスポンスの値を書き換えることができるという点です。

例えば特定のレスポンスが発生した時、アプリはどのような挙動になるのか? を調べたい時、そのレスポンスを得られるリクエストが毎回作れるとは限りません。

そんな時、このBreakpoints機能を活用すると、リクエストやレスポンスを任意の内容に書き換えて、アプリ側・プログラム側の挙動を確認することができます。

CData 製品だけでなく、APIを利用する製品・ソフトウェアやプログラム全般で役立つデバック方法ですので、紹介したいと思います!

設定方法

設定方法は簡単で、Fiddler で予めリクエストがキャプチャできる状態にした上で、「Rules」→「Automatic Breakpoints」から「Before Request」または「After Resppnses」を選択します。

f:id:sugimomoto:20210903131718p:plain

「Before Requests」はクライアントからリクエストが発行され、サーバーに届く前にリクエストを止めて、それを書き換えることができます。

「After Responses」は、サーバーからレスポンスを受け取った後、クライアント側にそのレスポンスを受け渡す前にそのレスポンスを止めて、レスポンス内容を書き換えることができます。

Fiddler Composer で試してみる

このBreakpointsの機能を試すなら、Fiddler 上でAPIリクエストを発行できる「Composer」機能を使うのが一番手っ取り早いです。

Composer タブに移動して、例えば Postman Echo の API「GET https://postman-echo.com/get?foo1=bar1&foo2=bar2」を入力し「Execute」をクリックしてみます。

f:id:sugimomoto:20210903131723p:plain

すると以下のようにリクエストがブレイクポイントの設定で止まります。

f:id:sugimomoto:20210903131728p:plain

これでリクエストやレスポンスを書き換えて、挙動を試すことができます。

CData Driver からのリクエストをキャプチャしてみる

それではCData Driver からも実際に試してみましょう。

今回はリクエスト発行を行うクライアントとして、CData JDBC Driver for Kintoneを利用しました。

www.cdata.com

f:id:sugimomoto:20210903131735p:plain

接続して以下のようなSQLを発行してみます。

SELECT * FROM [顧客管理(営業支援パック)] WHERE [RecordId] = 3;

f:id:sugimomoto:20210903131741p:plain

すると、Fiddler で以下のようにリクエストがキャプチャできました。

この時点ではまだBreakpointsは設定していないので、リクエストが発行されたことだけを確認しています。

f:id:sugimomoto:20210903131746p:plain

リクエストを書き換える

それでは CData Driver から発行されたリクエストを書き換えてみましょう。

SQLを実行する前に、「Automatic Breakpoints」を「Before Requests」に設定します。

f:id:sugimomoto:20210903131752p:plain

その後、同様のSQLを発行すると、以下のようにリクエストの途中でFiddlerがせき止めます。

あとは、例えば「Inspectors」タブの「Raw」に移動すると、HTTPリクエストの内容が確認できるので、ここでそのままリクエスト情報を編集できます。

今回は試しに「Authorzation」ヘッダーの値を「Hello」といった適当な値に書き換えてみました。

f:id:sugimomoto:20210903131757p:plain

書き換えた後「Run to Completion」をクリックすることで実際にKintone API側にリクエストが発行され、レスポンスを受け取ります。

すると、認証情報を書き換えたので、パスワード認証に失敗したというエラーメッセージを受け取ることができました。

f:id:sugimomoto:20210903131803p:plain

Driver側でも同じようにエラーが発生していることが確認できますね。

f:id:sugimomoto:20210903131809p:plain

レスポンスを書き換える

続いて「Automatic Breakpoints」を「After Responses」に切り替えて、レスポンスデータを書き換えてみましょう。

f:id:sugimomoto:20210903131815p:plain

同じようにSQLを実行すると、以下のように今度はレスポンスが表示された状態でブレイクします。

書き換えは同じように「Raw」でも可能ですが、Bodyだけ編集するのであれば「TextView」などが良いでしょう。

なお、今回はKintone API仕様上カーソルAPIが利用されているので、初回のリクエストではIdだけが返ってきます。そのためレコードの実体リクエストになる次のリクエストまで「Run to Completion」をクリックして処理していまします。

f:id:sugimomoto:20210903131819p:plain

リクエストが続くと、以下のようにKintone のレコードの実体を取得するので、これを書き換えてみましょう。

例えばメールアドレスのValue値を「Update@example.com」という値に書き換えてみました。

f:id:sugimomoto:20210903131825p:plain

これで処理をすすめると、CData Driver 側でも編集された結果が表示されます。

f:id:sugimomoto:20210903131830p:plain

タイムアウトについて

このようなFiddler の処理をしていると、Driverがレスポンスが受け取れない状態であるとみなして、Timeoutをおこしてしまう場合があります。

CData Driver のタイムアウト閾値はデフォルトが60秒となっており、以下の接続プロパティで切り替えることができるので、作業内容に応じて調整すると良いでしょう。

cdn.cdata.com