Swift URLRequest POST 如何使用重复的参数键发出请求

Swfit URLRequest POST How to make a request with duplicated parameter keys

我目前正在开发一个使用 Inoreader APIs 的项目,并且需要 one post 具有重复参数键的请求。

https://www.inoreader.com/reader/api/0/edit-tag?a=user/-/state/com.google/read&i=12345678&i=12345679

您可以看到重复的 i 参数。我在下面尝试设置 URLRequesthttpBody,无提示失败。

var parameters = [String: Any]()
parameters["i"] = idArray
parameters["a"] = "user/-/state/com.google/read"
let jsonData = try JSONSerialization.data(withJSONObject: parameters, options: [])
request.httpBody = jsonData
// I omitted other codes for simplicity

然后我尝试将 idArray 的每个元素与“&i=”链接起来,并将其分配给 parameters["i"],同样失败了。

// chainedID was something like 123&i=456&i=789, to make it looks like as url example given by documentation
parameters["i"] = chainedID

我该怎么做?这个 API 可以完美地处理一个项目,但我无法让它在多个项目上工作。它声称将适用于多个项目。

根据您发布的示例和 documentation 提到的示例,尽管请求是 POST 可以接受 URL的查询.

因此,解决方案是使用 URLComponents:

来撰写您的请求
var components = URLComponents(string: "https://www.inoreader.com/reader/api/0/edit-tag")
var queryItems = [
    URLQueryItem(name: "a", value: "user/-/state/com.google/read")
]
idArray.forEach {
    queryItems.append(URLQueryItem(name: "i", value: [=10=]))
}
components?.queryItems = queryItems
guard let url = components?.url else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"

在请求正文中使用JSON参数。