【问题标题】:Swfit URLRequest POST How to make a request with duplicated parameter keysSwift URL Request POST 如何使用重复的参数键发出请求
【发布时间】:2020-12-29 07:46:36
【问题描述】:

我目前正在开发一个使用 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

然后我尝试用“&i=”链接idArray 的每个元素,将其分配给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 可以完美地处理一个项目,但我不能让它在多个项目上工作。它声称可以处理多个项目。

【问题讨论】:

    标签: swift post parameters urlrequest


    【解决方案1】:

    根据您发布的示例和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 参数。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2020-06-26
      • 2019-03-14
      • 2020-01-26
      • 2017-09-13
      • 2015-03-05
      • 1970-01-01
      • 2018-03-26
      • 2011-10-23
      相关资源
      最近更新 更多