开发者社区 问答 正文

将API请求发布到Openhab 2和SWIFT

我正试图从我正在开发的一个定制的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"])

任何帮助都很感激。

展开
收起
游客5akardh5cojhg 2019-12-07 18:33:45 478 分享 版权
阿里云 AI 助理回答

在使用Swift和Alamofire尝试向OpenHAB系统发送POST请求时,遇到问题可能源于几个方面,包括网络配置、请求格式、以及OpenHAB端的设置。根据你提供的代码片段,这里有几个可能的问题及建议:

  1. URL Encoding: 你的参数部分 ["":"ON"] 看起来不正确,因为它包含了一个空键。你应该明确指定要更新的属性或命令的键名。假设你要控制的是一个名为BinarySensor的开关状态,通常需要提供一个表示状态的键(如state或具体API要求的其他字段)。

  2. Content-Type: 你设置了"Content-Type":"text/plain",但如果你是通过URL编码发送数据,更常见的做法是使用application/x-www-form-urlencoded。如果OpenHAB API期望JSON格式,则应使用application/json并相应地调整编码方式。

  3. Encoding: 确保你的编码方式与OpenHAB API所期望的相匹配。对于表单数据,你已经在使用URLEncoding.httpBody,这是正确的,但请确保它与Content-Type一致。

  4. 认证与权限: 确保你的OpenHAB系统没有额外的安全措施阻止未授权的访问,比如需要API密钥或者基本认证等。如果有,你需要在请求头中添加相应的认证信息。

  5. 错误处理: 添加错误处理代码来捕获和打印AF.request的响应或错误信息,这将帮助你诊断问题所在。例如,可以使用.responseJSON.responseString并提供一个闭包来处理成功或失败的情况。

修正后的代码示例可能如下所示(假设OpenHAB接受state作为参数键,并且期待application/x-www-form-urlencoded的内容类型):

let parameters: [String: Any] = ["state": "ON"]
AF.request("http://192.168.1.1:8080/rest/items/BinarySensor", 
           method: .post, 
           parameters: parameters, 
           encoding: URLEncoding.default, // 或者使用URLEncoding.httpBody,两者在这种情况下效果相同
           headers: ["Content-Type": "application/x-www-form-urlencoded"])
    .responseJSON { response in
        switch response.result {
        case .success(let value):
            print("Success with value: \(value)")
        case .failure(let error):
            print("Request failed with error: \(error)")
        }
    }

请根据OpenHAB API的具体文档调整上述代码中的参数名称和内容类型。如果问题依旧,请检查OpenHAB的日志文件,看是否有相关错误信息,同时确认网络连接和防火墙设置没有阻止请求到达OpenHAB服务器。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答