HTTP の multipart/form-data ボディをプレビュー

HTTP の multipart/form-data ボディをプレビュー のカバー画像

この記事では、multipart/form-data のリクエストとレスポンスを確認し、プレビューする方法を紹介します。

1. multipart/form-data とは?

アップロード機能を実装している場合、Content-Type が multipart/form-data の POST リクエストを使うことが多いでしょう。

multipart/form-data は、各値をひとまとまりのデータブロックとして送信する特殊なボディ形式です。各パートは定められた区切り文字(boundary、バウンダリとも呼ばれます)で区切られます。各パートのキーと値は、そのパートの Content-Disposition ヘッダーに記述されます。

multipart/form-data を使うと、次のことができます:

  • 1 つまたは複数のファイルをサーバーに送信する
  • キーと値のペアを送信する

multipart/form-data を作成する方法

Alamofire

Alamofire には、multipart/form-data をアップロードするための組み込み関数があります。次のコードは、画像とそのファイル名を httpbin.org サーバーにアップロードする方法を示しています。

let fileName = "image.png"
let imageData = Data() // Data of UIImage
AF.upload(multipartFormData: { multipartFormData in
    multipartFormData.append(Data(fileName.utf8), withName: "fileName")
    multipartFormData.append(imageData, withName: "file")
}, to: "https://httpbin.org/post")
    .responseDecodable(of: HTTPBinResponse.self) { response in
        debugPrint(response)
    }

URLSession

URLSession で multipart/form-data をアップロードするのは、かなり難しい作業です。次のコードでは、URLSession を使って multipart/form-data を httpbin.org に送信する方法を示します。

let fileData: Data = // Data of UIImage
let fileName = "image.png"
let boundary = UUID().uuidString

// Initialize the request
var request = URLRequest(url: URL(string: "https://httpbin.org/post")!)
request.httpMethod = "POST"

// Set multipart/form-data as a Content-Type
// Set boundary
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

// Create a part
let data = NSMutableData()
data.appendString("--\(boundary)\r\n")
data.appendString("Content-Disposition: form-data; name=\"\(fieldName)\"; filename=\"\(fileName)\"\r\n")
data.appendString("Content-Type: \(mimeType)\r\n\r\n")
data.append(fileData)
data.appendString("\r\n")

// Set as a body
request.httpBody = httpBody as Data

// Make a request
URLSession.shared.dataTask(with: request) { data, response, error in
  // Complete
}.resume()

2. Proxyman でプレビューする方法は?

幸い、Proxyman は multipart/form-data のプレビュー機能を標準でサポートしています。そのため、何も設定する必要はありません。

Content-Type が multipart/form-data の場合、Proxyman はプレビュー用のタブを表示します。

Proxyman で multipart/form-data をプレビュー
Proxyman で multipart/form-data をプレビュー

multipart/form-data の各パートをファイルに書き出す

各 multipart のデータをファイルとしてエクスポートし、ローカルマシンに保存することもできます。

iOS アプリからアップロードした内容をプレビューすると、起こりうるバグを見つけやすくなるので便利です。

アップロードが失敗したときの確認事項

Content-Type ヘッダーのバウンダリが、ボディ内の区切り文字と一致しているか確認してください。次に、各フィールド名、ファイル名、パートの Content-Type を確認します。サーバーはリクエストを受け付けても、名前が誤っているパートを無視することがあります。アップロードには個人のファイルやフォームの値が含まれることが多いため、安全だと確認できた場合にのみ、書き出したパートを保存または共有してください。


Proxyman は、iOS デバイス、iOS シミュレータ、Android デバイスの HTTPS 通信をキャプチャできる、高性能な macOS アプリです。

https://proxyman.com からダウンロードできます。

Noah Tran
Noah Tran

2026年7月19日 に改訂。 アップロードの確認項目(バウンダリ、ファイル名、Content-Type、個人情報)を追加しました。

アップロード内容を正確に確認

Proxyman の multipart プレビューを使えば、長い生のリクエストボディを読まなくても、フォームの値とファイルを確認できます。

Proxyman をダウンロード