В настоящее время я пытаюсь сделать запрос 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. Я не хватает заголовков? Пожалуйста, дайте мне знать, если вы видите что-то не так с просьбой.
Я просто отправлю ответ сам, потому что он может помочь кому-то в будущем. Я использовал устройство для запроса, и я делал запрос на localhost. Я был настолько тупым, чтобы отключить Wi-Fi на моем телефоне.....
Пожалуйста, попробуйте это.
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()
Благодарю.