Fiddler Everywhereを使ってMac上でAndroidアプリのHTTP(S)通信をキャプチャする
導入
Androidアプリを開発していると、アプリ上でどういう通信をしているか覗きたいときありますよね。
そんなときに、よく使われるのがCharlesですが、
みんな大好きFiddlerがMacやLinuxでも使えるFiddler Everywhereとして今年の春頃にリリースされていたのでした。
あまりFiddler Everywhereについての日本語記事がなかったので、
今回はMac上でFiddler Everywhereを使ってAndroidアプリのHTTP(S)通信をキャプチャするやり方について、簡単にお話します。
Fiddler Everywhereのセットアップ
まず、Fiddler Everywhereを公式サイトから適当にダウンロードしてインストールしてください。
起動しましたら、この時点でMac上のHTTP通信が丸裸にされていると思います。
右上の設定ボタンを押して、
HTTPS
の項目で Trust root certificate
します。
さらに Cpature HTTPS traffic
がオンになっているか確認してください。
これでMac上にルート証明書がインストールされて、Mac上でのHTTPS通信が一度Fiddlerで赤裸々にされるようになります。
次に、 Connections
の項目で、ポート番号を確認し、 Allow remote computers to connect
にチェックを入れます。
これで他の端末がFiddlerのプロキシを利用できるようになります。
右下のSaveボタンを押して、Fiddler Everywhereの設定は完了です。
一回、Fiddler Everywhereを再起動しておきましょう。
Android端末のセットアップ
次に、Android端末にプロキシを設定します。
まず、Fiddler Everywhereが動いているMacのIPアドレスを確認しておきます。
一番簡単なのは、System Preferences.appのNetworkで確認する方法でしょうか。
次に、HTTP(S)通信をキャプチャしたいAndroid端末をMacと同じLANに接続しておきます。
そして接続しているWi-Fiの設定を開き、プロキシを手動に切り替え、先ほど確認したIPとポート番号を入力して保存します。
これで当該Android端末で通信される通信がFiddler Everywhereを仲介するようになったので、
ブラウザで適当なHTTP通信を行うとFiddler Everywhereで確認できるようになったと思います。
しかし、ルート証明書をインストールしていないので、
http://ipv4.fiddler:{先ほど確認したポート番号}
にアクセスし、下部リンクからルート証明書をダウンロードして、 適当な名前を付け、端末にインストールさせてください。
これでAndroid上のブラウザで適当なHTTPS通信をすると、Fiddler EverywhereでHTTP(S)通信を閲覧できるようになったと思います。
Androidアプリの設定
とはいえ、プロキシ設定のダイアログに書いてあった通り、ブラウザ以外のアプリではプロキシが利用できないので、
開発しているアプリ上の設定を弄ります。
まず、以下の内容のファイル res/xml/network_security_config.xml
を作成してください。
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
次に AndroidManifest.xml
の application
に以下のプロパティを追加します。
<application ... android:networkSecurityConfig="@xml/network_security_config"> ...
これで当該アプリをデバッグ実行すると、Fiddler EverywhereでHTTPS通信が見れるようになったはずです。