Как прочитать простую строку из запроса 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]);