0

Я пытаюсь захватить источник со страницы онлайн, чтобы проанализировать его и поместить информацию в словарь.Асинхронный запрос не дает правильного ответа

Все работает нормально, но данные, которые я получаю, не заполняются. Половина данных только приближается.

Я использую ниже код:

-(void)getEmployeeTrips:(void(^)(NSDictionary *))completion 
    { 
    NSString *url; 
    url =[NSString stringWithFormat:@"%@://%@:%@/%@?dbname=%@&colname=%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"mongoScheme"],[[NSUserDefaults standardUserDefaults] stringForKey:@"mongoHost"],[[NSUserDefaults standardUserDefaults] stringForKey:@"mongoPort"],@"query",[[NSUserDefaults standardUserDefaults] stringForKey:@"mongoDbName"],@"trips"]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 

    [request setURL:[NSURL URLWithString:url]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:postDictionary options:kNilOptions error:&error]]; 
    [request setValue:finalAuthString forHTTPHeaderField:@"Authorization"]; 

    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
     NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); 
     completion([NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]); 
     }]; 
    } 

Когда я звоню это завершающие блок на другой класс данных не подходит полностью.

Я пытался с NSUrlConnection делегировать методы и NSUrlSession также, но не решил мою проблему.

Есть ли проблемы с моим кодом или с сервера?

+0

Вы можете использовать 'NSURLSessionDataTask' вместо 'NSURLConnection'. Я столкнулся с той же проблемой, когда получил html-файл с сервера. –

+0

@ sailendrak.I пытался с этим, но без изменений – Himanth

+0

Можете ли вы разместить свой NSMutableURLRequest ??? –

ответ

0

Если ваш веб-сервер, необходимо постоянное соединение,

или

если ваш сервер нужно больше времени, чем максимальное значение тайм-аута NSURLRequest, в

пытаются использовать CFReadStream

вот мой старый код живой поток через http-соединение.

- (void) startLiveWithURL:(NSURL *)_url 
{ 
    url = _url; 

    NSLog(@"%@", url); 

    receivedData = [[NSMutableData alloc] init]; 

    request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)@"GET", (__bridge CFURLRef)url, kCFHTTPVersion1_1); 
    readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request); 
    CFReadStreamSetProperty(readStream, kCFStreamPropertyHTTPAttemptPersistentConnection, kCFBooleanTrue); 

    CFStreamClientContext ctxt = {0, (__bridge void *)(self), NULL, NULL, NULL}; 
    static const CFOptionFlags kNetworkEvents = kCFStreamEventHasBytesAvailable | kCFStreamEventEndEncountered | kCFStreamEventErrorOccurred; 

    if(CFReadStreamSetClient(readStream, kNetworkEvents, ReadStreamClientCallBack, &ctxt)) 
    { 
     CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); 
     if(CFReadStreamOpen(readStream)) 
     { 
      NSLog(@"opened"); 
     } 
    } 
} 

- (void) stopLive 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startLiveWithURL:) object:url]; 

    if(readStream != nil) 
    { 
     CFReadStreamClose(readStream); 
     CFRelease(readStream); 
     CFRelease(request); 
     request = nil; 
     readStream = nil; 
    } 
} 

#pragma mark - cfnetwork 
static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventType type, void *clientCallBackInfo) 
{ 
    // [[LiveHttpParser sharedObject] handleNetworkEvent: type]; 
    switch (type) 
    { 
     case kCFStreamEventHasBytesAvailable: 
     { 
      UInt8 buffer[20480]; 
      CFIndex bytesRead = CFReadStreamRead(readStream, buffer, sizeof(buffer)); 
      if (bytesRead < 0) 
      { 
       [(__bridge LiveHttpParser *)clientCallBackInfo handleStreamError]; 
      } 
      else if (bytesRead) 
      { 
       [(__bridge LiveHttpParser *)clientCallBackInfo handleWithData:[NSData dataWithBytes:buffer length:bytesRead]]; 
      } 
     } 
      //   [self handleBytesAvailable]; 
      break; 
     case kCFStreamEventEndEncountered: 
      [(__bridge LiveHttpParser *)clientCallBackInfo handleStreamComplete]; 
      break; 
     case kCFStreamEventErrorOccurred: 
      [(__bridge LiveHttpParser *)clientCallBackInfo handleStreamError]; 
      break; 
     default: 
      break; 
    } 
}