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

问题描述

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

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

如您所见,重复的 i 参数。我已经尝试在下面设置 httpBodyURLRequest,但无声无息地失败了。

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 参数。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...