2016-04-19 2 views
-1

У меня встроенный AFNetworking от here в моем проекте. Но когда я получаю запрос с использованием AFNetworking, он всегда переходит в блок «Сбой». Ниже мой код. Пожалуйста, дайте мне знать, что я здесь делаю неправильно?Почему AFNetworking всегда входит в блок Failure?

NSString *baseUrl = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA"; 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager GET:baseUrl parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { 
    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     NSLog(@"%@",responseObject); 

    //Always it invoke the Failure block 
    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]; 
     NSInteger statusCode = response.statusCode; 
     NSLog(@"Error Code=%ld",statusCode); 
     NSLog(@"Desc=%@",response.description); 
    }]; 

Примечание: - Это действительный URL. http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA

Также ниже код ошибки и описание: -

Error Code 200 
Error Description <NSHTTPURLResponse: 0x7fbab8509860> { URL: http://www.nactem.ac.uk/software/acromine/dictionary.py?sb=hmm } { status code: 200, headers { 
    Connection = close; 
    "Content-Type" = "text/plain; charset=UTF-8"; 
    Date = "Wed, 20 Apr 2016 00:17:27 GMT"; 
    Server = "Apache/2.2.15 (Scientific Linux)"; 
    "Transfer-Encoding" = Identity; 
} } 
+0

Вы добавить приложение транспортной безопасности, чтобы обеспечить соединение HTTP в вашем PLIST? –

+0

Да, я добавил –

+0

Какая ошибка вы получаете в блоке отказов? – CrimsonChris

ответ

1

Я нашел ответ: -

NSString *url = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=hmm"; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

//Missing this line (Any request or response serializer dealing with HTTP is encouraged to subclass) 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
NSError* error; 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject 
                  options:kNilOptions 
                   error:&error]; 
     NSLog(@"Success= %@",json); 

    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]; 
     NSInteger statusCode = response.statusCode; 
     NSLog(@"Fail=%ld",statusCode); 
    }]; 
0

Посмотрите на описание ошибки, и вы будете увидеть полезное объяснение

домен = com.alamofire .error.serialization.response Код = -1016 «Ошибка запроса: неприемлемый контент-тип: текст/обычная»

C c Исправить ошибку - сделать контент-тип application/json, так как он выглядит как JSON.

+0

Но у меня нет описания этой ошибки. Моя ошибка отличается –

+0

Уверена, что вы проверяете «error.description»? Ваш источник выше проверяет «response.description». Если на самом деле это другое, напишите здесь! –

0

Этот вопрос с типом ответа, который AFNetworking ищет. Если вы явно скажете, чтобы он ожидал текстового/простого ответа, тогда вы должны выполнить ваш обратный вызов. Следующая строка кода непосредственно после инициализации, где ваш менеджер объект должен сделать:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 
Смежные вопросы