# Proxyman for iOS の Breakpoint チュートリアル

> Proxyman for iOS の Breakpoint を使ったステップバイステップのチュートリアルです。iPhone 上で HTTP(s) の通信を一時停止し、URL、メソッド、ヘッダー、ボディ、ステータスコードを編集する方法を解説します。

## Proxyman Breakpoint で iPhone 上の HTTP(s) リクエストとレスポンスを変更する {#modify-https-request--response-on-your-iphone-with-proxyman-breakpoint}

バージョン 2.0.0 以降、Proxyman for iOS では、アプリのロジックを変更することなく、リクエストとレスポンスのデータをその場で変更できます。

この短いチュートリアルでは、Proxyman の Breakpoint ツールを使って、iOS デバイス上の HTTP(s) リクエストとレスポンスを変更する方法を紹介します。例えば、次のような変更ができます：

* リクエストの URL（スキーム、ホスト、パス、ポートを含む）と HTTP メソッドを変更する
* リクエストまたはレスポンスの HTTP ヘッダーを変更する
* リクエストのクエリを変更する
* リクエストまたはレスポンスの HTTP ボディを変更する
* レスポンスの HTTP ステータスコードを変更する

## 前提条件 {#prerequisites}

* App Store から最新版の Proxyman をダウンロードします：[https://apps.apple.com/us/app/proxyman/id1551292695](https://apps.apple.com/us/app/proxyman/id1551292695)
* iOS デバイスに Proxyman の証明書をインストールして信頼します。Proxyman を初めて使う場合は、[iPhone から HTTPS 通信をキャプチャして確認する](https://proxyman.com/posts/2021-10-17-Getting-Started-With-Proxyman-For-iOS)の手順に従い、iPhone での HTTP 通信のキャプチャを開始してください。

## Breakpoint ルールを作成する {#create-breakpoint-rules}

Breakpoint ルールを作成する方法は 3 つあります：

1. More タブから

* **More** タブ → **Breakpoint** → **+** ボタンをタップします。
* ルールの項目（Title、Method、Matching URL、サブパスを含めるかどうか）を入力します。
* ルールをリクエスト、レスポンス、またはその両方のどれに適用するかを選択します。

2. 「Waiting Breakpoints」画面から

* Waiting Breakpoint アイコンをタップして、**Create Breakpoint Rule** を選択します。
* その後、ルールの項目を入力します（前の方法と同じです）。

3. コンテキストメニューから

* リクエストを長押しして、**Add to Breakpoint List** を選択します。
* Proxyman が、選択したリクエストからルールの項目をすべて自動で入力します。

![Add to Breakpoint List を含む Proxyman for iOS のコンテキストメニュー。httpbin.org が入力された Breakpoint ルールが開く](https://proxyman.com/docs/assets/image%20(4).png)

_リクエストから Breakpoint ルールを作成する_

この例では、Breakpoint ルールはリクエストとレスポンスの両方に適用されます。それでは、リクエストを送信して動作を確認してみましょう。

## HTTP(s) リクエストを変更する {#modify-https-requests}

URL に一致するリクエストを送信すると、Proxyman がそのリクエストを一時停止し、待機中の Breakpoint があることを表示します。Home 画面の小さなアイコンをタップすると、待機中の Breakpoint の一覧が表示されます。次に Breakpoint を選択して、リクエストの編集を開始します。

### URL とメソッドを変更する {#modify-url--method}

HTTP メソッド、URL、クエリを変更できます。クエリを変更すると URL も更新され、その逆も同様です。

![編集済みの URL クエリと HTTP メソッドのメニューが開いている Proxyman for iOS の Breakpoint リクエストエディタ](https://proxyman.com/docs/assets/image%20(18).png)

_URL と HTTP メソッドを変更する_

### ボディを変更する {#modify-body}

ボディを別のデータ型に置き換えると、Proxyman が Content-Type を検出し、ヘッダーを自動で更新します。

## Breakpoint を実行、中止、続行する {#execute-abort-continue-breakpoint}

変更内容に問題がなければ、右上のメニューからリクエストまたはレスポンスを実行します。元のリクエストのまま進めるには **Continue**、キャンセルするには **Abort** を使います。

Breakpoint ルールはリクエストとレスポンスの両方に適用されるため、**Execute** をタップすると、レスポンスが待機中の Breakpoint の一覧に追加されます。

これで、レスポンスの HTTP ステータスコードを変更したり、ヘッダーを更新したり、ボディを置き換えたりできます（リクエストを変更する場合と同じ方法です）。

うまくできました！フロー一覧では、小さな青いアイコンが、そのフローが変更されたことを示します。

リクエストとレスポンスの両方が、想定どおりに更新されました。

![Breakpoint によって実行されたリクエストの詳細と、新しいレスポンスボディが表示されている Proxyman for iOS](https://proxyman.com/docs/assets/image%20(9).png)

_Breakpoint によってリクエストとレスポンスが変更された状態_

**補足**：

* 新しいルールを作成すると、Breakpoint ツールとルールはどちらもデフォルトで有効になります。必要に応じて、それぞれオン・オフを切り替えられます。
* Breakpoint が動作するよう、VPN、Breakpoint ツール、Breakpoint ルールがすべて有効になっていることを確認してください。
* 最初のルールがリクエストまたはレスポンスに一致した場合、他のルールは適用されません。
* リクエストを編集している間は Response タブが無効になります。レスポンスを編集している間は、Request タブは読み取り専用になります。

## 次のステップ {#whats-next}

Breakpoint を使うと、リクエストとレスポンスをその場で変更できますが、手作業が多くなります。自動化したい場合は、[Map Local for iOS チュートリアル](https://proxyman.com/docs/ja/proxyman-ios/tutorial-for-ios/map-local-for-ios-tutorial)をご覧ください。ローカルファイルをレスポンスとして自動でマッピングできます。
