我有这个错误:
可选(“< html>< body> 408请求超时< / h1> \ n您的浏览器未及时发送完整请求。\ n< / body>< / html> \ n “)
和此:
Error Domain = NSCocoaErrorDomain Code = 3840“JSON文本没有以数组或对象开头,并且选项允许未设置片段。” UserInfo = {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}
这是我的代码:
print("envar solicitud")
let url = URL(string: "http://dev.viupruebas.com.mx/webservice/service/prueba")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type");
request.httpMethod = "GET"
let postString = "usuario=empleadodemo&password=1234"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {//si existe un error se termina la funcion
print("solicitud fallida \(error)")//manejamos el error
return //rompemos el bloque de codigo
}
do {//creamos nuestro objeto json
print("recibimos respuesta")
let responseString = String(data: data, encoding: .utf8)
print("respuesta : \(responseString)")
if let json = try JSONSerialization.jsonObject(with: data) as? [String: String] {
print ("**respuesta = \(data)")
DispatchQueue.main.async {//proceso principal
let nombre = json["username"]//constante
let telefono = json["telefono"]//variable
// var pais = json["pais"]
// self.nombreLabel.text = nombre//ponemos el texto en los textfield
// self.edadLabel.text = edad
//self.paisLabel.text = pais
}
}
} catch let parseError {//manejamos el error
print("error al parsear: \(parseError)")
let responseString = String(data: data, encoding: .utf8)
print("respuesta : \(responseString)")
}
}
task.resume()
答案 0 :(得分:1)
我复制了你的代码。进行了1次更改:将GET
更改为POST
。这就是我现在收到的答案:
**respuesta = ["pais": "Mexico Veracruz", "nombre": "Martin Flores", "edad": "30"]
JSON没问题。这意味着它没有错误地进行反序列化。
一般建议:确保正确遵循后端文档。因为只需遵循API文档就可以避免这种错误。希望它有所帮助。