Подтвердить что ты не робот

(Cocoa ошибка 3840.) "(Недопустимое значение вокруг символа 0.) AFNetworking

Я получаю следующую ошибку при использовании метода GET для извлечения файла с сервера:

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

Я пробовал несколько разных вещей, и я считаю, что это может быть связано с форматом JSON в файле, который я пытаюсь получить.

Вот код, который я использовал:

_username = @"JonDoe";
NSDictionary *parameters = @{ @"username" : _username};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

[manager GET:@"http://.........."
  parameters:parameters
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);
     }];

Мой метод POST работает нормально. Я просто не могу решить эту проблему с помощью GET. Есть идеи? Спасибо.

4b9b3361

Ответ 1

Судя по обсуждению в комментариях, кажется, что ваш запрос GET успешный (код ответа 200), но тело ответа недействительно JSON (или фрагмент JSON), как вы просили, используя ваш AFJSONResponseSerializer. Базовый AFHTTPResponseSerializer может использоваться для ответов, которые не являются JSON.

Ответ 2

Я уверен, что у вас есть действительный ответ от сервера, но ваш ответ не является допустимым форматом в JSON, возможно потому, что у вас есть качалки перед первым {. Попробуйте следующее: поместите тот же URL-адрес вручную в свой браузер, и вы увидите виновника в ответе. Надеюсь, что это помогло.

Ответ 3

Привет, ребята, это то, что я нашел своей проблемой: я звонил в Alamofire через функцию Authenticate Users: я использовал функцию "Login User" с параметрами, которые будут вызываться из "body" (электронная почта: String, password: String) Это будет передано

мой errr был точно:

optional (alamofire.aferror.responseserializationfailed(alamofire.aferror.responseserializationfailurereason.jsonserializationfailed(error domain = nscocoaerrordomain code = 3840 "недопустимое значение вокруг символа 0." userinfo = {nsdebugdescription = недопустимое значение вокруг символа 0

символ 0 - это ключ: означает, что вызов для "электронной почты" не соответствует параметрам: см. код ниже

func loginUser (email: String, password: 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" в параметрах функции должен соответствовать дате "электронной почты" при разборе, тогда он будет работать. Я больше не получил ошибку... И символ 0 был "адресом электронной почты" в параметре "тело" для Alamofire запрос:

Надеюсь, что это поможет