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
参数。我在下面尝试设置 URLRequest
的 httpBody
,无提示失败。
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参数。
我目前正在开发一个使用 Inoreader APIs 的项目,并且需要 one post 具有重复参数键的请求。
https://www.inoreader.com/reader/api/0/edit-tag?a=user/-/state/com.google/read&i=12345678&i=12345679
您可以看到重复的 i
参数。我在下面尝试设置 URLRequest
的 httpBody
,无提示失败。
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参数。