预览 multipart/form-data 请求体与响应体

预览 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,你可以:

  • 向服务器发送一个或多个文件。
  • 发送键值对(Key-Value)

如何构造 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 头部中的 boundary 与请求体中的分隔符一致。然后检查每个字段名、文件名以及各部分的内容类型。服务器可能会接受请求,却忽略名称错误的部分。上传内容通常包含个人文件或表单数据,因此只有在确认安全的情况下,才保存或分享导出的部分。


Proxyman 是一款高性能的 macOS 应用,可帮助开发者抓取 iOS 设备、iOS 模拟器和 Android 设备上的 HTTPS 流量。

前往 https://proxyman.com 获取。

Noah Tran
Noah Tran

最后修订于 2026年7月19日。 新增对分隔符(boundary)、文件名、内容类型和隐私数据的上传检查。

准确查看你的上传内容

使用 Proxyman 的 multipart 预览功能检查表单值和文件,无需逐行阅读冗长的原始请求体。

下载 Proxyman