问题描述
我目前正在开发一个使用 Inoreader API 的项目,并且需要 one 个带有重复参数键的发布请求。
https://www.inoreader.com/reader/api/0/edit-tag?a=user/-/state/com.google/read&i=12345678&i=12345679
如您所见,重复的 i
参数。我已经尝试在下面设置 httpBody
的 URLRequest
,但无声无息地失败了。
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: $0))
}
components?.queryItems = queryItems
guard let url = components?.url else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
和不在请求正文中使用 JSON 参数。