ApiCatcher クイックスタート

ApiCatcher は端末上でアプリの HTTP/HTTPS・WebSocket トラフィックをキャプチャし、閲覧・分析します。

このページでは証明書、フィルタ、リクエスト履歴、エクスポート、API ドキュメントなど、日常のキャプチャ操作を扱います。リライト、スクリプト、コンボリプレイなどは下の独立ドキュメントを見てください。

関連ドキュメント:


目次

  1. 準備:証明書とデバッグ認可
  2. トラフィックフィルタ
  3. キャプチャ Session と履歴検索
  4. Cookie を探す
  5. エクスポート:HAR・ファイル・単一リクエスト
  6. API ドキュメントの自動生成
  7. 品質と性能:API Scan

1. 準備:証明書とデバッグ認可

1.1 CA 証明書のインストールと信頼(HTTPS に必須)

いまのアプリ通信はほぼ HTTPS です。デフォルトでは HTTPS はキャプチャしません。証明書がなければ復号できず、平文は見えません。HTTPS を見るなら、先に CA を入れて完全に信頼してください。

証明書の入れ方は 2 通りです。

  1. ApiCatcher が生成する CA(ほとんどの場合こちら):下の手順に従います。
  2. 自分の証明書を取り込む(企業証明書):社内 CA を使う場合は 1.2 へ。

デフォルト CA の手順:

  1. アプリで「証明書をインストール」をタップすると、ブラウザが構成プロファイルをダウンロードします。
  2. 「設定」→「一般」→「VPNとデバイス管理」 で、ダウンロードした ApiCatcher プロファイルをインストールします。
  3. ここが肝心:「設定」→「一般」→「情報」→「証明書信頼設定」 を開き、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 は見ず、複数リクエストをマージしません。

  1. 履歴 を開く。
  2. 右上「…」→「Cookieを検索」。
  3. Host を入力(必須。キャプチャ済み一覧から選ぶか、手入力)。
  4. Session は任意。空なら全 Session から探します。
  5. 「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 回の件数にも上限があります。