Я вызываю веб-сервис, используя URLSession.shared.dataTask. Вызывая его с помощью, datatask с url работает нормально, тогда как вызов datatask с запросом возвращает данные с «мусором в конце».
Может кто-нибудь объяснить мне, почему? Ниже приводится функция в 2 форматах.
dataTask, вызываемый с помощью URL (task = URLSession.shared.dataTask (with: url, extensionHandler), работает нормально и возвращает действительные результаты в данных.
basePath - путь к URL-адресу веб-службы
static func getUserDetails(withprefixText prefixText: String, withUserName userName:String, withPassword password:String) {
// Call the web serrvice
urlString = basePath + "?prefixText=" + prefixText + "&prefixText1=" + userName + "&prefixText2=" + password
guard let url = URL(string: urlString) else { return }
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data: Data?,response: URLResponse?,error: Error?) in
if error != nil {
print("error = \(String(describing: error))")
return
}
//Let's convert response sent from a server side script to a NSDictionary object:
do {
let json = try JSONSerialization.jsonObject(with: data! , options: []) as? [String:Any]
if let parseJSON = json {
if let data = parseJSON["data"] as? [[String:Any]] {
Now we can access values by it's key
}
}
else {
print ("Parsing error")
}
} catch {
print("Serilization Error = \(error)")
}
})
task.resume()
}
dataTask вызывается с запросом (task = URLSession.shared.dataTask (with: request, completeHandler) возвращает результаты в виде данных с мусором в конце. Поэтому JSONSerialization.jsonObject завершается ошибкой с ошибкой «Мусор в конце»
static func getUserDetails(withprefixText prefixText: String, withUserName userName:String, withPassword password:String) {
// Call the web serrvice
let myURL = URL(string: basePath)
var request = URLRequest(url: myURL!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let postString = ["prefixText": prefixText, "prefixText1": userName, "prefixText2": password] as [String: String]
if JSONSerialization.isValidJSONObject(postString) {
do {
request.httpBody = try JSONSerialization.data(withJSONObject: postString, options: .prettyPrinted)
}
catch let error {
print(error.localizedDescription)
return
}
}
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data: Data?,response: URLResponse?,error: Error?) in
if error != nil {
print("error = \(String(describing: error))")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data! , options: []) as? [String:Any]
if let parseJSON = json {
if let data = parseJSON["data"] as? [[String:Any]] {
// Now we can access values by its key
}
}
else {
print ("Parsing error")
}
} catch {
print("Serilization Error = \(error)")
}
})
task.resume()
}