Valor inválido Alamofire alnetworkingedor del personaje 0

Alamofire.request(.GET, "url").authenticate(user: "", password: "").responseJSON() { (request, response, json, error) in println(error) println(json) } 

Esta es mi request con Alamofire, para una cierta request en algún momento funciona, pero a veces obtengo:

 Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x78e74b80 {NSDebugDescription=Invalid value around character 0.}) 

He leído que esto puede deberse a que JSON no es válido, pero la respuesta es una cadena json estática que he validado en el validador JSON como válida. Contiene å ä ö caracteres y algo de HTML.

¿Por qué a veces recibo este error?

También me enfrenté al mismo problema. Intenté answerString en lugar de responseJSON y funcionó. Supongo que esto es un error en alamofire al usarlo con django.

Recibí el mismo error mientras subía la image en forma multiparte en Alamofire como estaba usando

 multipartFormData.appendBodyPart(data: image1Data, name: "file") 

Me fijo reemplazando por

 multipartFormData.appendBodyPart(data: image1Data, name: "file", fileName: "myImage.png", mimeType: "image/png") 

Espero que esto ayude a alguien.

Que esta Help YOu

 Alamofire.request(.GET, "YOUR_URL") .validate() .responseString { response in print("Success: \(response.result.isSuccess)") print("Response String: \(response.result.value)") } 

El mismo problema me sucedió y realmente terminó siendo un problema del server ya que el tipo de contenido no estaba configurado.

Añadiendo

 .validate(contentType: ["application/json"]) 

A la cadena de request lo resolvió para mí

 Alamofire.request(.GET, "url") .validate(contentType: ["application/json"]) .authenticate(user: "", password: "") .responseJSON() { response in switch response.result { case .Success: print("It worked!") print(response.result.value) case .Failure(let error): print(error) } } 

Tengo el mismo error. Pero encontré la solución para eso.

NOTA 1: "No es un error de AlarmFire", es un error de server.

NOTA 2: No es necesario cambiar "responseJSON" a "responseString".

 public func fetchDataFromServerUsingXWWWFormUrlencoded(parameter:NSDictionary, completionHandler: @escaping (_ result:NSDictionary) -> Void) -> Void { let headers = ["Content-Type": "application/x-www-form-urlencoded"] let completeURL = "http://the_complete_url_here" Alamofire.request(completeURL, method: .post, parameters: (parameter as! Parameters), encoding: URLEncoding.default, headers: headers).responseJSON { response in if let JSON = response.result.value { print("JSON: \(JSON)") // your JSONResponse result completionHandler(JSON as! NSDictionary) } else { print(response.result.error!) } } } 

Así es como logré resolver el error de 3840 no válido.

Fue con el tipo de encoding utilizado en la request, el tipo de encoding utilizado debe aceptarse en su lado del server .

A fin de conocer la encoding, tuve que ejecutar todos los types de encoding:

pnetworkingeterminado / methodDependent / queryString / httpBody

  let headers: HTTPHeaders = [ "Authorization": "Info XXX", "Accept": "application/json", "Content-Type" :"application/json" ] let parameters:Parameters = [ "items": [ "item1" : value, "item2": value, "item3" : value ] ] Alamofire.request("URL",method: .post, parameters: parameters,encoding:URLEncoding.queryString, headers: headers).responseJSON { response in debugPrint(response) } 

Tal vez sea demasiado tarde pero resolví este problema de otra manera que no se menciona aquí:

Cuando utiliza .responseJSON() , debe establecer el encabezado de respuesta con content-type = application/json , de lo contrario, se bloqueará incluso si su cuerpo es un JSON válido. Entonces, tal vez su encabezado de respuesta está vacío o usa otro tipo de contenido.

Asegúrese de que su encabezado de respuesta esté configurado con content-type = application/json para .responseJSON() en Alamofire funciona correctamente.

La aplicación en la que estaba trabajando esta mañana tuvo el mismo error. Creí que era un error del lado del server ya que no pude cargar una image de usuario.

Sin embargo, al revisar mi API personalizada, me di count de que después de agregar un certificate SSL a mi website que no había actualizado las URL de api.swift, los datos no podían publicarse:

 let HOME_URL = "http://sitename.io" let BASE_URL = "http://sitename.io/api" let UPLOAD_URL = "http://sitename.io/api/user/upload" 

Cambié las URL a https: //. Problema resuelto.

En mi caso, tengo que agregar esta Clave: "Aceptar": "application / json" a mi request de encabezado.

Algo como esto:

 let Auth_header: [String:String] = ["Accept":"application/json", "Content-Type" : "application/json", "Authorization":"Bearer MyToken"] 

Espero que esto pueda ayudar a alguien.