Mac向けのHTTPデバッギングProxyツールProxymanがおしゃれ。
なぜかQiitaでは紹介記事が全くなく、存在が地味だったので同じく地味な私が紹介してみます。
#1. HTTP Debugging Proxyってなに?
クライアントサイドのソフトウェアをデバッグしているときに、サーバサイドのレスポンスが実際と異なる別のものだった時にどう振る舞うか確認したい時ありますよね?例えば、顧客データ取得するAPIを使ったクライアントを作るときに、リリース前だから顧客データ取得できないしテストデータを入れる権限がない時とかあると思います。サーバサイドの開発であってもクライアントからのリクエストを操作したいシチュエーションありますよね。
ネイティブアプリが発するHTTPS通信を覗いてみたい時もあるでしょう。
HTTP Debugging Proxyは、そういったシチュエーションで、HTTP/HTTPS通信を確認し、インターセプトしてリクエストやレスポンスを操作する機能を提供してくれます。
以下のように動作します。
Proxyman以外には、Fiddlerなんかも有名です。ProxymanはMacでしか動かないので、WindowsユーザはFiddler使ってください。
#2. Proxymanのインストール
公式サイトよりダウンロードしインストールします。インストールすると以下のように自動でproxyの設定がされます。
#3. HTTPS通信を確認する
暗号化で保護されたHTTPS通信の中を覗いたり操作したりするため、Proxymanは通信の中間で、一度複合化し暗号化するという操作を行います。その時に証明書がサーバの証明書ではなくProxymanが提供する証明書になってしまいます。通常クライアントは安全のためにそういった通信を弾く仕組みがありますが、弾かせないようにProxymanの証明書を信用させる必要があります。
メニューバーから、Certificate > Install Certificate on this Mac...を選択し証明書をインストールします。
Enable only this domain をクリックするとHTTPS通信の詳細を確認することができます。
Google ChromeであればDevelopper Toolsでも同様のことが確認できます。しかし、ブラウザ以外のネイティブアプリでもHTTPS通信の詳細を確認することができます。
#4. 通信を操作する
Proxymanは通信を操作する(manipulateする)方法として、「手動操作」とJavaScriptによる「Scripting」が提供されています。
Qiitaはプログラミング情報のナレッジコミュニティなので、プログラミングを扱わないとコメント欄が荒れることもあるそうなので、本記事ではScriptingの方法を紹介します。
また、通信を操作する行為はサーバ所有者の意図通りでない可能性があるので、自身が管理するサーバで試すかサーバ利用ポリシーを順守するようにしてください。
メニューバーから、Scripting > Script List... を選択します。
スケルトンとしてスクリプトがあらかじめ記載されてるので、なんとなく使い方はわかるでしょう。
URLに操作対象のURLを記載し、なにをするか記述します。レスポンスを返す際(onResponse)、レスポンスボディをそっくり書き換えてしまいましょう。以下の行をonResponse関数に記載し、Cmd+sを押します。
response.body = "manipulated!";
当該URLにアクセスしてみると以下のようにレスポンスの内容が変わったことがわかります。
このようなリクエストやレスポンスの操作を行う場合は、こういったツールがあると非常に便利です。Google Chromeでこういったことをやる場合はエクステンションが必要でしょうか。
Scritptingでできることについては、公式ガイドを参照ください。こちらを確認すると一通りやりたいことができることがわかります。
RFCに準拠しないようなリクエストやレスポンスを処理しようとした時に、おそらくパーシングできずエラーになってしまいます。なので、そういった通信を扱う場合は、別のツールを使うか準拠するように修正しましょう。
以上です。ぜひ楽しんでください。