【发布时间】:2022-01-24 13:19:29
【问题描述】:
我有一个要使用 URLSession 发出的发布请求。
发布请求如下所示:
curl -X POST 'https://smartdevicemanagement.googleapis.com/v1/enterprises/privatekey/devices/devicekey:executeCommand' -H 'Content-Type: application/json' -H 'Authorization: authtoken' --data-raw '{
"command" : "sdm.devices.commands",
"params" : {
"commandName" : "cmdValue"
}
}'
由于这是一个 POST 请求,我只想在响应是错误消息时进行解码。
这是我目前拥有的代码:
guard let url = URL(string: "https://smartdevicemanagement.googleapis.com/v1/enterprises/\(project_id)/devices") else {return}
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("token", forHTTPHeaderField: "Authorization")
let cmdParams: [String: String] = ["command":"sdm.devices.commands", "params" : ["commandName": "cmdValue"]]
do {
request.httpBody = try JSONSerialization.data(withJSONObject: cmdParams)
} catch let error {
print(error.localizedDescription)
}
URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil else {print(error!.localizedDescription); return }
guard let data = data else {print("empty data"); return }
cmdParams 抛出错误,所以我不确定如何正确构造 params 请求,成功的 POST 将导致 API 返回 {} 不成功的请求将返回一些错误。
如何调整我的代码以使其正常工作?
【问题讨论】:
-
cmdParams是[String:Any],而不是[String:String] -
@vadian 感谢进行了更改,但仍然无法将请求发送到 POST。
-
[String:Any]不可编码。您要么需要创建一个struct来对数据进行编码,要么直接使用 JSON 字符串(如我的回答)。 -
@BjornB。
JSONSerialization可以序列化[String:Any]。这不是关于Codable -
@vadian 你是对的。
标签: swift swiftui nsurlsession urlsession