Swift Преобразовать запрос PUT curl в alamofire или URLRequest - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть приложение, которое управляет некоторыми устройствами IoT.Я пытаюсь заставить работать более старую розетку iHome, которая использует evrythng API.Для этого потребуется принять команду, подобную этой:

curl -X PUT \
  https://api.evrythng.com/thngs/<DEVICE_ID>/properties/targetpowerstate1 \
  -H 'authorization: MY_API_KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '[{"value":"1"}]'

Проблема в том, что [{"value": "1"}] не работает при попытке отправить как параметр с использованием alamofire из-за вьющейсябрекеты в квадратных скобках.Поэтому я попытался с помощью NSMutableURLRequest сделать что-то вроде:

        let url = URL(string: "https://api.evrythng.com/thngs/\(self.id)/properties/targetpowerstate1")
        let request = NSMutableURLRequest(url: url!)
        let session = URLSession.shared
        let stringParams = "[{\"value\":\"0\"}]"
        request.httpBody = stringParams.data(using: String.Encoding.utf8)
        request.httpMethod = "PUT"
        request.addValue("no-cache", forHTTPHeaderField: "cache-control")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        request.addValue(apikey, forHTTPHeaderField: "Authorization")
        let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
            guard error == nil else {
                getvcfunc.statusMsg(error! as! String)
                return
            }
            guard let data = data else {
                getvcfunc.statusMsg("Data is empty")
                return
            }
            let outputStr  = String(data: data, encoding: String.Encoding.utf8)
            getvcfunc.statusMsg(outputStr ?? "no value")
        })
        task.resume()  

Пожалуйста, помогите мне, я часами пробую разные вещи, чтобы просто выяснить, как отправить этот запрос PUT с помощью фигурных скобок.

  • Дэйв
...