向 Openhab2 和 Swift 发布 API 请求
Posting API request to Openhab2 and Swift
我正在尝试 post 从我正在开发的自定义 Swift iOS 应用程序向我的 Openhab 系统发出请求,但是我似乎无法得到响应。
我正在使用以下但无法触发传感器。
AF.request("http://192.168.1.1:8080/rest/items/BinarySensor", method: .post, parameters: ["":"ON"], encoding: URLEncoding.httpBody, headers: ["Content-Type":"text/plain"])
感谢任何帮助。
您需要将编码更改为 JSONEncoding.default,将 headers 更改为 application/json。这是您的请求现在的样子
AF.request("http://192.168.1.1:8080/rest/items/BinarySensor", method: .post, parameters: ["":"ON"], encoding: JSONEncoding.default, headers: ["Content-Type":"application/json"])
我走了一条不同的路。不使用 Alamofire,只使用标准 Swift 网络。 Postman 允许为特定请求创建多个不同语言的代码块,因此使用它生成的请求。
如果有人想知道如何在没有 Alamofire 的情况下做到这一点,答案如下。
import Foundation
var semaphore = DispatchSemaphore (value: 0)
let parameters = "OFF"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string:"http://192.168.x.x:8080/rest/items/BinarySensor")!,timeoutInterval: Double.infinity)
request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
return
}
semaphore.signal()
}
task.resume()
semaphore.wait()
我确定有更好的方法,但这种方法有效。
我正在尝试 post 从我正在开发的自定义 Swift iOS 应用程序向我的 Openhab 系统发出请求,但是我似乎无法得到响应。
我正在使用以下但无法触发传感器。
AF.request("http://192.168.1.1:8080/rest/items/BinarySensor", method: .post, parameters: ["":"ON"], encoding: URLEncoding.httpBody, headers: ["Content-Type":"text/plain"])
感谢任何帮助。
您需要将编码更改为 JSONEncoding.default,将 headers 更改为 application/json。这是您的请求现在的样子
AF.request("http://192.168.1.1:8080/rest/items/BinarySensor", method: .post, parameters: ["":"ON"], encoding: JSONEncoding.default, headers: ["Content-Type":"application/json"])
我走了一条不同的路。不使用 Alamofire,只使用标准 Swift 网络。 Postman 允许为特定请求创建多个不同语言的代码块,因此使用它生成的请求。
如果有人想知道如何在没有 Alamofire 的情况下做到这一点,答案如下。
import Foundation
var semaphore = DispatchSemaphore (value: 0)
let parameters = "OFF"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string:"http://192.168.x.x:8080/rest/items/BinarySensor")!,timeoutInterval: Double.infinity)
request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
return
}
semaphore.signal()
}
task.resume()
semaphore.wait()
我确定有更好的方法,但这种方法有效。