2016-04-27 3 views
0

У нас есть приложение, для которого требуется вызов webservice для отдыха (для экрана входа в систему). Призывая этот WebService, мы можем получить результат от времени, но много раз, мы получаем нулевые данные со следующим сообщением:iOS Rest Webservice Возврат недопустимой ошибки хоста

<HTML><HEAD><TITLE>Invalid Host Specified</TITLE></HEAD> 
<BODY>The request did not specify a valid virtual host.</BODY></HTML> 

После того как мы получаем эту ошибку, мы не можем получить какие-либо другое результат, и приложение застряло на экране входа в систему. Мы должны закрыть приложение и открыть его и повторить попытку, чтобы увидеть, работает ли веб-сервис.

Что может быть причиной этой ошибки? Мы попробовали как NSURLConnection, так и NSURLSession, чтобы получить результат, но оба имеют ту же проблему. Было бы очень полезно, если кто-то даст решение для этого или, по крайней мере, укажет мне в правильном направлении при решении проблемы.

Это функция, которую я использую для вызова веб-службы:

-(void)startWebServiceForURL:(NSString *)URL withInputJson:(NSString *)inputJson forView:(UIView *)parentView completionBlock:(DownloadCompletionBlock)completionBlock errorHandlingBlock:(DownloadErrorBlock)ErrorBlock 
{ 

    if (_showIndicator) 
    { 

     UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject]; 
     UIViewController *viewC = [window rootViewController]; 
     _progressIndicator = [MBProgressHUD showHUDAddedTo:viewC.view animated:YES]; 

    } 


    _completion = completionBlock; 
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

    [request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[inputJson length]] forHTTPHeaderField:@"Content-Length"]; 

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

    [request setHTTPMethod:@"POST"]; 

    [request setHTTPBody:[inputJson dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setTimeoutInterval:60.0f]; 

    NSURLSession * session = [NSURLSession sharedSession]; 

    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     dispatch_async(dispatch_get_main_queue(), 
         ^{ 
          if (_showIndicator) 
          { 
           [_progressIndicator hideAnimated:YES]; 
          } 


          if (!error && data != nil) 
          { 
           NSLog(@"result received!!!"); 

           NSError * error1; 

           { 
            NSLog(@"print something else"); 

            NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

            NSLog(@"new string: %@", newStr); 

            NSDictionary * jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error1]; 

            NSLog(@"received data: %@", jsonDictionary); 

            if (!error1) 
             _completion(YES,jsonDictionary); 
            else 
            { 
             _error = ErrorBlock; 
             _error(error1); 
            } 
           } 

          } 
          else 
          { 
           NSLog(@"error receiving result"); 
           _error = ErrorBlock; 
           _error(error); 

           if (error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet) 
           { 
            NSLog(@"not connected"); 
           } 
          } 
         }); 


    }] resume]; 
} 
+0

Возможно, вам потребуется опубликовать код, чтобы люди могли видеть, что вы пытаетесь сделать. Я сомневаюсь, что ваше описание даст кому-то достаточно, чтобы идти дальше – Flexicoder

+0

Что вы уверены, эта ошибка связана с NSURLConnection или NSURLSession? Подсказка: как насчет веб-службы? – CouchDeveloper

+0

@CouchDeveloper - только что проверил NSURLConnection, потому что я часто использовал его до iOS 8. –

ответ

0

По всей вероятности, все следующие условия:

  • Вы контактирование веб Oracle сервер.
  • Несколько доменных имен указывают на IP-адрес этого сервера.
  • Один из них не указан в конфигурационном файле веб-сервера.
  • Это домен, к которому ваше приложение пытается получить доступ.

Единственные другие возможности, о которых я могу думать, это то, что вы пытаетесь получить доступ к хосту по его IP-адресу, или вы делаете запросы HTTP/1.0 (у которых отсутствует заголовок Host).