Как прочитать простую строку из запроса POST в AFNetworking (No JSON)

Я использую AFNetworking для связи с сервером через POST, который отвечает простой строкой, содержащей нужную мне информацию. Я использую следующий код:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST: MY_URL
   parameters: MY_PARAMETERS
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //do something
      }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //etc.
      }];

Однако, кажется, что AFNetworking ожидает, что каждый ответ будет в формате JSON, потому что я получаю эту ошибку при выполнении моего запроса:

Ошибка домена = NSCocoaErrorDomain Code = 3840 "Операция не может быть завершено. (Cocoa ошибка 3840.)" (текст JSON не начинался с массива или объект и параметр, позволяющий не создавать фрагменты.) UserInfo = 0x1566eb00 {NSDebugDescription = текст JSON не начинался с массива или объекта и возможность разрешить фрагменты.}

Как я могу сказать AFNetworking, что это нормально, что ответ не является объектом JSON? Я видел что-то с участием AFHTTPClient, но он больше не является частью AFNetworking.

Ответы

Ответ 1

Вы можете сообщить AFHTTPRequestOperationManager или AFHTTPSessionManager, как обрабатывать ответ, например. перед вызовом POST вы можете сделать следующее:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

Затем в вашем блоке success вы можете преобразовать NSData в строку:

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

Сказав это, вы можете подумать о преобразовании своей веб-службы, чтобы вернуть ответ JSON, поскольку гораздо проще разобрать этот способ (и различать допустимый ответ и некоторую ошибку сервера).

Ответ 2

  NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);

вы можете получить описание описания ответа, как показано ниже

 NSLog(@"JSON: %@", [responseObject description]);