Alamofire在字符0附近的值无效

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

这是我对Alamofire的要求,因为某些要求它有时可以工作,但有时我得到:

 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.}) 

我读过,这可能是由于无效的JSON,但响应是一个静态JSONstring,我已经在JSONvalidation器validation有效。 它确实包含字符和一些HTML。

为什么我有时会得到这个错误?

我也面临同样的问题,我试着responseString而不是responseJSON和它的工作。我想这是alamofire与Django的使用它的错误。

我在使用Alamofire时以多部分forms上传图像时出现同样的错误

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

我通过replace修复

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

希望这可以帮助别人。

可以这个帮助YOU

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

同样的问题发生在我身上,它实际上最终成为服务器问题,因为没有设置内容types。

添加

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

请求链为我解决了它

 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) } } 

我得到了同样的错误。 但我find了解决办法。

注1:“这不是Alarmofire错误”,这是服务器错误的内容。

注2:您不需要将“responseJSON”更改为“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!) } } } 

这是我设法解决无效的3840错误。

它与请求中使用的编码types一致,使用的编码types应该在服务器端被接受。

为了了解编码,我必须运行所有的编码types:

默认/ 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) } 

也许是为时已晚,但我用另一种方式解决了这个问题:

当你使用.responseJSON() ,你必须设置content-type = application/json的响应头,否则,即使你的主体是一个有效的JSON,它也会崩溃。 所以,也许你的回应标题是空的或使用另一种内容types。

请确保您的响应头设置为content-type = application/json to .responseJSON()

我今天上午工作的应用程序也有同样的错误。 我相信这是一个服务器端错误,因为我无法上传用户图像。

但是,在检查我的自定义API后,我意识到在向我的网站添加SSL证书之后,我没有更新api.swift URL,数据无法发布:

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

我将url更改为https://。 问题解决了。

在我的情况下,我必须添加此密钥:“接受”:“应用程序/ json”到我的标题请求。

像这样的东西:

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

我希望这可以帮助别人。

嗨,这就是我发现的问题:我通过一个函数来调用Alamofire来validation用户:我使用了“Login User”这个函数,用“body”(email:String,password:string)这将被传递

我的错误正是:

(alamofire.aferror.responseserializationfailed(alamofire.aferror.responseserializationfailurereason.jsonserializationfailed(error domain = nscocoaerrordomain code = 3840“invalid value around character。”)userinfo = {nsdebugdescription =字符0附近无效值

字符0是这里的关键字:表示“email”的调用与参数不匹配:请参阅下面的代码

func loginUser(email:String,密码:String,已完成:@escaping downloadComplete){let lowerCasedEmail = email.lowercased()

  let header = [ "Content-Type" : "application/json; charset=utf-8" ] let body: [String: Any] = [ "email": lowerCasedEmail, "password": password ] Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in if response.result.error == nil { if let data = response.result.value as? Dictionary<String, AnyObject> { if let email = data["user"] as? String { self.userEmail = email print(self.userEmail) } if let token = data["token"] as? String { self.token_Key = token print(self.token_Key) } 

函数参数中的“email”在parsing时必须与let“email”匹配,然后才能正常工作。我不再有错误…而且字符0是Alamofire请求的“body”参数中的“email”

希望这可以帮助