ApiCatcher クイックスタート
ApiCatcher は端末上でアプリの HTTP/HTTPS・WebSocket トラフィックをキャプチャし、閲覧・分析します。
このページでは証明書、フィルタ、リクエスト履歴、エクスポート、API ドキュメントなど、日常のキャプチャ操作を扱います。リライト、スクリプト、コンボリプレイなどは下の独立ドキュメントを見てください。
関連ドキュメント:
目次
- 準備:証明書とデバッグ認可
- トラフィックフィルタ
- キャプチャ Session と履歴検索
- Cookie を探す
- エクスポート:HAR・ファイル・単一リクエスト
- API ドキュメントの自動生成
- 品質と性能:API Scan
1. 準備:証明書とデバッグ認可
1.1 CA 証明書のインストールと信頼(HTTPS に必須)
いまのアプリ通信はほぼ HTTPS です。デフォルトでは HTTPS はキャプチャしません。証明書がなければ復号できず、平文は見えません。HTTPS を見るなら、先に CA を入れて完全に信頼してください。
証明書の入れ方は 2 通りです。
- ApiCatcher が生成する CA(ほとんどの場合こちら):下の手順に従います。
- 自分の証明書を取り込む(企業証明書):社内 CA を使う場合は 1.2 へ。
デフォルト CA の手順:
- アプリで「証明書をインストール」をタップすると、ブラウザが構成プロファイルをダウンロードします。
- 「設定」→「一般」→「VPNとデバイス管理」 で、ダウンロードした ApiCatcher プロファイルをインストールします。
- ここが肝心:「設定」→「一般」→「情報」→「証明書信頼設定」 を開き、
ApiCatcher CAで始まる証明書を見つけて フルアクセスを信頼 します。
うまくいかないとき
- タイムアウトやおかしなステータスになる:たいてい 手順 3 で信頼していない。
- アプリを消して入れ直した:古いプロファイルは無効です。設定から削除して、最初からやり直してください。
1.2 企業証明書(社内ネットワーク)
社内アプリが社内 CA しか信用しないことがあります。
- 用途:会社から渡された
.pem/.p12を取り込み、内部ホスト(例*.corp.internal)に結び、ローカルの TLS ハンドシェイクを通します。 - 注意:キャプチャを止めた状態で取り込み・変更し、その後に再開してください。
1.3 自己署名証明書
企業証明書もなく、ApiCatcher 生成の証明書も使いたくない場合は、同じ企業証明書フローで自分の証明書を入れられます。 詳細は カスタム証明書。
2. トラフィックフィルタ
OS や裏で動くアプリの通信が多いので、見たい対象だけ残すフィルタを先に置くのがおすすめです。
- ブロックリスト:該当ホストは記録しません。許可リストが空なら、ブロック以外は全部記録します。
- 許可リスト:ルールが 1 件でもあると、一致したリクエストだけ記録します。
- 書き方:
*が使えます。*.example-api.comなら、そのホスト配下の検証環境サブドメインにマッチします。
うまくいかないとき
- 対象アプリのリクエストが見えない:許可リストをオンにしたのにホストを入れ忘れている、またはブロックリストに入っている。
- 構文:
*.api.comのような星印だけで十分です。ここは正規表現ではありません。
3. キャプチャ Session と履歴検索
ブロック/許可は 何を記録するか を決めます。記録したあとは 履歴 ページの Session と検索で絞ります。
3.1 キャプチャ Session
Session は VPN キャプチャ 1 回分です。画面上の名前は開始時刻(yyyy-MM-dd HH:mm:ss)で、付け替えられません。
VPN キャプチャを開始すると Session が 1 本できます。停止時に終了時刻と件数を書き込み、1 件もなければその Session は消えます。実行中の終了時刻は「キャプチャ中」です。
履歴の Session フィルタで 1 回分に固定するか、「すべて」を選べます。ピッカーには時間範囲、所要時間、件数、その回で見えた Host(最大 5)が出ます。Session を削除すると、その回のリクエストも消えます。
3.2 フィルタ条件
履歴ページのフィルタバーは「フィルタを設定」で表示項目を選べます。「フィルタをリセット」で条件をクリアできます。
| 条件 | マッチ |
|---|---|
| Session | 特定の 1 回、またはすべて |
| Host | ホスト完全一致 |
| アプリ (UA) | User-Agent から取ったアプリ名の完全一致 |
| メソッド | GET / POST / PUT / DELETE / PATCH / OPTIONS / HEAD |
| スキーム | HTTP / HTTPS / WS / WSS |
| タイプ | すべて、HTML、JSON、XML、画像、動画、音声、Protobuf(Content-Type) |
| ステータス | 1xx–5xx、および「応答なし」 |
| 時間 | 直近 15 分、直近 1 時間、今日、直近 7 日、直近 30 日、カスタム範囲 |
3.3 キーワード検索
検索欄の初期対象は URL(プレースホルダは「Search url...」)です。大文字小文字を区別しない部分一致で、正規表現も AND / OR も使えません。
履歴の「…」→「検索対象を切り替え」で範囲を変えます。
| 対象 | 見る場所 |
|---|---|
| URL | リクエスト URL |
| リクエストヘッダ | ヘッダ名または値 |
| レスポンスヘッダ | ヘッダ名または値 |
| リクエスト Body | リクエスト本文 |
| レスポンス Body | レスポンス本文 |
Body 検索はテキスト系 Content-Type(HTML / XML / JSON / プレーンテキスト / form-urlencoded / form-data)だけです。画像・動画などのバイナリ Body は読みません。
4. Cookie を探す
「Cookieを検索」は、ある Host への 直近 1 件 のリクエストヘッダ Cookie を取り出します。Set-Cookie は見ず、複数リクエストをマージしません。
- 履歴 を開く。
- 右上「…」→「Cookieを検索」。
- Host を入力(必須。キャプチャ済み一覧から選ぶか、手入力)。
- Session は任意。空なら全 Session から探します。
- 「Cookieを検索」をタップ。
見つかると「直近のCookie」とキー/値が、見つからないと「Cookieを含むリクエストはありません」と出ます。
5. エクスポート:HAR・ファイル・単一リクエスト
5.1 HAR で書き出す
HAR 1.2 の JSON です。Charles、Fiddler、Burp などに渡せます。ファイル名は apicatcher-export-yyyyMMddHHmmss.har の形です。
| 入口 | 範囲 | いまのフィルタに従うか |
|---|---|---|
| 履歴の「HARとして書き出す」 | 現在のフィルタ結果の全件(表示中のページだけではない) | 従う(Session、Host、時間、メソッド、タイプ、ステータス、検索語はリストと同じ) |
| 履歴で複数選択して共有/書き出し | 選んだリクエストだけ | 従わない |
| リクエストお気に入りフォルダから HAR | そのフォルダ内 | 従わない |
画面には「書き出すリクエストは N 件です。フィルタを変えて対象を絞れます。」と出ます。書き出し中はページを閉じないでください。
5.2 画像 / 動画 / 音声
入口は 履歴 のファイル管理(フォルダアイコン)。
- 画像、動画、音声 の 3 分類。
- Session、Host で絞れます。
Range/Content-Rangeの断片は結合してから書き出します。- 1 ファイルずつ、または Host ごとのサブフォルダを ZIP にして一括書き出し。
リクエスト詳細の本文からも「ファイルを書き出す」でき、Content-Type に合わせて一時ファイルにして共有します。
5.3 単一リクエスト
リクエスト詳細の「リクエストを書き出す」:
- Raw:元の HTTP リクエスト + レスポンス(
.txt) - cURL:ターミナルで再送できるコマンド(
.sh) - Markdown:Markdown プレビュー(
.md)
6. API ドキュメントの自動生成
条件を満たす HTTP/HTTPS をキャプチャすると、アプリが端末上で API ドキュメントを作り、Host 単位でまとめます。同じ API を何度見ても、まだ無いフィールドだけ足し、既存のパラメータ名は上書きしません。
6.1 対象とマージ規則
レスポンスがあり、ステータスが 301–308 以外の HTTP/HTTPS だけです。リクエストの Content-Type が JSON / XML / multipart/form-data / x-www-form-urlencoded、またはレスポンスが JSON / XML のときだけドキュメント化します。画像、動画、HTML、プレーンテキストはスキップします。
リライトルールやスクリプトで改変したリクエストは書き込みません。一意キーは メソッド + Host + Path(例:GET + api.example.com + /v1/user)。
マージ:
- Query / Header / Body:無い名前だけ追加。
- Body のサンプル:今回のレスポンスが 200 のときだけ更新。
- Cookie、User-Agent などよくある標準ヘッダはパラメータに入れません。Authorization、Content-Type、独自ヘッダは残します。
6.2 Postman / Apifox / Bruno へ
入口:
- Host の API 一覧右上(その Host の全エンドポイント)。
- 個別 API の詳細(その 1 本だけ)。
- 設定 → API お気に入り → 書き出す(お気に入りだけ)。
| 行き先 | やり方 |
|---|---|
| Postmanへ書き出す | Postman API Key を入れて Workspace を読み込み、新しい Collection を作るか既存を選ぶ |
| Apifoxへ書き出す | Apifox API Key とプロジェクト ID。フォルダ ID は任意(空ならルート) |
| Brunoへ書き出す | bruno.json と .bru 入りの ZIP。Bruno で Open Collection |
手順つきの画面はこちら:
7. 品質と性能:API Scan
端末に残したトラフィックを、非侵入で品質・漏洩・レイテンシの観点で見ます。解析は端末内で完結します。
7.1 組み込みエンジン
- 機微情報:平文の電話番号、身分証番号、メール、クラウド資格情報(AWS Key、OpenAI API Key など)。
- スタック漏洩:レスポンスに混ざった Java / Python / SQL のエラースタック。
- 高頻度呼び出し:平均間隔がしきい値未満なら、ループや誤ったリトライを疑います。
- 所要時間:エンドポイントごとの p95 / p99。
7.2 カスタム検査 (Custom Scan)
業務ルールは JS で書けます。
- 問題なければ
null。問題があれば短い説明(200 文字以内)を返すと、レポートに載ります。
うまくいかないとき
- 結果が出ない:スキャン範囲(Host / Session)に JSON/API があるか確認してください。静的ファイルだけだと空です。1 回の件数にも上限があります。