AFNetworking Ожидаемая ошибка типа содержимого
Я получаю строку json в блоке отказа
NSURL *url = [[NSURL alloc] initWithString:@"http://www.vinipost.com/Services/Update/UpdateService.asmx/GetPropSubType?"]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"%@", JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); }]; [operation start];
Вывод:
Request Failed with Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {( "text/json", "text/javascript", "application/json", "text/html" )}, got text/plain" UserInfo=0x71521a0 {NSLocalizedRecoverySuggestion=[{"PropTypId":1,"PropCatId":1,"PropTyp":"Flat/ Condo"}.......**
- AFNetworking 2.0: не может POST с JSON от IOS
- Как обрабатывать большой ответ JSON
- Swift 2 jSON Call может бросать, но не отмечен попыткой
- Приложение NSJSONSerialization crashing
- при использовании google-направлений Api и запроса данных в json, получающих нулевые данные
- Сохранить массив объектов на диске с помощью JSONModel (IOS)
- Попытка получить доступ к ответам в глобальном масштабе
- Импорт данных в базу данных Realm
- Как рекурсивно пройти NSDictionary в быстром
- Swift dateFormat для переменной dateType string
- iOS Огромная обработка JSON (30 МБ)
- Parse JSON Swift 3
- ValueForKeyPath () возвращает что-то неожиданное
Ошибка ясна: веб-служба возвращает неправильный тип содержимого. Тип контента должен быть одним из следующих:
"text / json", "text / javascript", "application / json", "text / html"
Но он возвращается
текст / обычный
Более того, если вы посмотрите на ответ http, он возвращает HTML TAGS внутри него, поэтому AFNetworking не может анализировать.
Если эта страница:
http://www.vinipost.com/Services/Update/UpdateService.asmx/GetPropSubType?
находится под вашим контролем, исправляет поведение, удаляя html-теги и изменяя тип содержимого
Вы должны добавить эту строку перед операцией
[AFJSONRequestOperation addAcceptableContentTypes: [NSSet setWithObject:@"text/plain"]];
В AFNetworking вам необходимо создать NSURLRequest с помощью AFHTTPClient (сначала вам нужно создать AFHTTPClient и установить некоторые свойства для этого объекта), как показано ниже
AFHTTPClient *httpClient = [[httpClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.vinipost.com/"]];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; [httpClient setDefaultHeader:@"Accept" value:@"application/json"]; httpClient.parameterEncoding = AFJSONParameterEncoding;
теперь, если это зависит от GET / POST или любого другого запроса типа, вам нужно установить параметр, я считаю его POST-запросом, поэтому установите параметр dict и задайте все необходимые пары значений ключа правильно. Если вам не нужны параметры, вы можете передать параметры как nil
NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"Services/Update/UpdateService.asmx/GetPropSubType?" parameters:params]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"%@",JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Error MSG = %@",error); }]; [operation start];
надеюсь, что это сработает для вас 🙂