Ответ AFHTTPRequestOperation nil вместо ошибки

Я использую AFHTTPRequestOperation, чтобы получить пару HTML-страниц для анализа. Проблема, с которой я сталкиваюсь, заключается в том, что если я использую неправильный номер порта, например, при подключении к серверу, блок ошибки «сбой» не срабатывает. Вместо этого срабатывает блок завершения, но строка ответа равна нулю. Я просто переключаюсь на AFNetworking с ASIHTTP, и с ASIHTTP это приведет к ошибке.

Конечно, это должно привести к ошибке? Как я могу поймать это?

    NSString *urlString;
    urlString = [NSString stringWithFormat:@"%@://%@:%@/",kHttp,_IP,_Port];
    NSURL *url = [NSURL URLWithString:urlString];

    // Set authorization
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
    [httpClient setAuthorizationHeaderWithUsername:_User password:_Pass];

    NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"Info.htm" parameters:nil];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([self parseInfoLive:operation.responseString])
            _count_parsed++;
        if (_count_parsed == 2)
            [[NSNotificationCenter defaultCenter] postNotificationName:@"downloadsComplete" object:nil];
    }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                         NSLog(@"Error during connection: %@",error.description);
                                         [[NSNotificationCenter defaultCenter] postNotificationName:@"errorConnecting" object:nil];
                                     }];
[operation start];

person Darren    schedule 16.09.2012    source источник
comment
Вы можете добавить проверку в свой блок успеха, который проверяет полученные данные (проверяет, являются ли они нулевыми). Вы также можете подклассировать AFHTTPRequestOperation, чтобы сделать именно это и перейти к блоку ошибок для этих случаев.   -  person Till    schedule 17.09.2012
comment
Да, это правда, я, вероятно, так и сделаю. Мне было интересно, почему я не получил ошибку, но порт, который я тестировал, дал пустую страницу в сафари, так что я думаю, что это все-таки не ошибка.   -  person Darren    schedule 17.09.2012
comment
Да, пустые результаты не считаются ошибками HTTP - был там, получил футболку;)   -  person Till    schedule 17.09.2012


Ответы (1)


Кажется, это ошибка в AFNetworking, даже спустя 2,5 года после этого вопроса. Это происходит, когда ответ содержит специальный символ (он может отображаться как пробел, поскольку иногда даже программы просмотра текста не могут его проанализировать). Вы можете попробовать преобразовать полученную строку JSON в NSUTF8StringEncoding, а затем при необходимости использовать ее как NSData.

NSURL *url = <YOUR REQUEST URL>
NSString *data = [NSString stringWithContentsOfURL:url];
NSData *metOfficeData = [data dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = [NSError new];
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:metOfficeData options:kNilOptions error:&error];
person Sahil Kapoor    schedule 01.05.2015