iOS URLRequest POST Failing Swift

-2

В настоящее время я пытаюсь сделать запрос POST на платформе iOS с телом JSON. Моя просьба работает в cURL, но я не могу заставить ее работать в iOS; запрос истекает. Вот мой быстрый код:

    class func createNewChannel(name: String, priv: String, channelKey: String, handle: String, password: String, auth: String) {
    let baseURL = "http://10.0.0.220:3000/"

    let dict = ["name": name, "private": priv, "channelKey": channelKey, "handle": handle, "password": password,  "auth": auth] as [String : Any]
    let jsonData = JSON(dict)
    do {
        let post = try jsonData.rawData()
        let postLength = String(post.count)
        let url = URL(string: "\(baseURL)channel/createChannel")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.httpBody = post as Data
        request.setValue(postLength, forHTTPHeaderField: "Content-Length")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.setValue("application/json", forHTTPHeaderField: "Accept")

        let session = URLSession.shared
        let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
            if error == nil {
                do {
                    let json = try JSON(data: data!)
                    print(json)
                }
                catch {
                    print(error.localizedDescription)
                }
            }
            else {
                print(error!)
            }
        })
       task.resume()
    }
    catch {
        print(error.localizedDescription)
    }
}

Когда я вызываю эту функцию, запрос не работает... Я уверен, что использую правильный URL-адрес, потому что он работает с конечной точкой GET. Я не хватает заголовков? Пожалуйста, дайте мне знать, если вы видите что-то не так с просьбой.

Теги:
post
http

2 ответа

2

Я просто отправлю ответ сам, потому что он может помочь кому-то в будущем. Я использовал устройство для запроса, и я делал запрос на localhost. Я был настолько тупым, чтобы отключить Wi-Fi на моем телефоне.....

1

Пожалуйста, попробуйте это.

    let session = URLSession.shared
    let request = URLRequest(url:url)
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

     request.httpMethod = "POST"
        do {
            let data = try JSONSerialization.data(withJSONObject: yourParam!, options:JSONSerialization.WritingOptions(rawValue: 0))
            let mappedString : String = (String(data: data , encoding: String.Encoding.utf8)!)
            request.httpBody = mappedString.data(using: String.Encoding.utf8, allowLossyConversion: false)
        }
        catch let error as NSError
        {
            print("JSON ERROR 1     " + error.localizedDescription)
            closure(Result.failure(error))
            return
        }
     let task = session.dataTask(with: request, completionHandler: {
        (data, response, error) in
         DispatchQueue.main.async {
             guard data != nil && error == nil else {
                print(error)
                 return
            }
            do {
                let jsonResult : NSDictionary? = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
                print("jsonResult\(jsonResult!)")
             } catch let error as NSError {
                 print("JSON ERROR 2     " + error.localizedDescription)
            }
    }
})
                task.resume()

Благодарю.

  • 0
    Спасибо за ответ ... Мне жаль говорить, что даже с вашим методом запрос все еще истекает. Есть другие идеи?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню