Подтвердить что ты не робот

NSURLConnection Запрос GET возвращает -1005, "сетевое соединение было потеряно",

Я пытаюсь сделать простой запрос GET с помощью NSURLConnection в XCode 6 (Beta7 2) в iOS 8 SDK, который не работает с "Code 1005, сетевое соединение было потеряно". Вызов завершается неудачно, когда я пытаюсь извлечь http://www.google.com или несколько других образцов страниц из Интернета, но успешно, если я сделаю запрос к простому HTTP-сервер на localhost (python -m SimpleHTTPServer). Я также пробовал использовать библиотеку AFNetworking (2.4.1) - URL-адреса, которые не совпадают с NSURLConnection, также терпят неудачу с библиотекой.

Здесь мой код -

NSString * url = @"http://0.0.0.0:8000";
// NSString * url = @"http://www.google.com";

NSLog(@"URL : %@", url);

// Mutable is probably not required, but just in case it REALLY WANTS me to set HTTP method
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[theRequest setHTTPMethod:@"GET"];

NSURLResponse *urlResponse = nil;
NSError *error = nil;

NSData * data = [NSURLConnection sendSynchronousRequest:theRequest
                                      returningResponse:&urlResponse
                                error:&error];

if (error == nil) {
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(response);
} else {
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"%@", [error userInfo]);
}

Logs:

2014-09-11 17:34:23.950 SearchExample[5092:2074687] URL : http://www.google.com
2014-09-11 17:34:24.023 SearchExample[5092:2074687] {
    NSErrorFailingURLKey = "http://www.google.com";
    NSErrorFailingURLStringKey = "http://www.google.com";
    NSLocalizedDescription = "The network connection was lost.";
    NSUnderlyingError = "Error Domain=kCFErrorDomainCFNetwork Code=-1005 \"The network connection was lost.\" UserInfo=0x7fc8515640a0 {NSErrorFailingURLStringKey=http://www.google.com/, NSErrorFailingURLKey=http://www.google.com/, _kCFStreamErrorCodeKey=57, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=The network connection was lost.}";
    "_kCFStreamErrorCodeKey" = 57;
    "_kCFStreamErrorDomainKey" = 1;
}
2014-09-11 17:34:24.023 SearchExample[5092:2074687] URLResponse: (null)
4b9b3361

Ответ 1

В последнее время я видел сбои в подключении к Интернету на симуляторе iPhone 6, что привело к тем же ошибкам. У моего Mac было рабочее интернет-соединение, которое симулятор не сделал. Перезапуск симулятора исправил проблему.

Ответ 2

Я получал эту ошибку последовательно на iOS 9 с определенными сетевыми вызовами. Двое работали нормально, но еще двое не были.

Оказалось, что это вызвано некоторыми неправильными параметрами, которые я передавал с телом запроса... Я бы не ожидал, что это вызовет ошибку -1005... но это произошло.. Избавьтесь от ненужных параметров заставило все это работать!

Ответ 3

Я пробовал все, что предлагалось, по крайней мере, на 15 ответах от Google, но ни одна из них не решила мою проблему, пока я не попробовал следующее, полностью посвященное моей проблеме. Похоже, что соединения Wi-Fi могут стать поврежденными на Mac, поэтому, если вы удалите определенное соединение, которое используете, а затем снова подключитесь (выбирая сеть и снова вводите свой пароль), тогда это исправит проблему и не станет более страшным -1005 "сетевое соединение было потеряно".

  • Перейдите к символу Wi-Fi в меню Mac и "Turn Wi-Fi Off"
  • Затем выберите "Open Network Preferences" (из того же меню внизу).
  • В нижнем правом углу панели "Сеть" выберите "Дополнительно".
  • Выберите сетевое соединение, к которому вы были ранее подключены.
  • Нажмите минус-символ ниже этой таблицы, чтобы удалить это соединение.
  • Нажмите "ОК" для этого окна.
  • Нажмите "Применить" в окне "Сеть".
  • Вернитесь к символу Wi-Fi на панели меню и снова включите Wi-Fi.
  • Подождите, пока появится сетевое подключение, а затем выберите его (и он снова попросит пароль, потому что вы удалили информацию о подключении).
  • Теперь он запомнит это недавно обновленное соединение, которое должно решить проблему!

Ответ 4

Попробуйте изменить сериализацию запроса в AFNetworking http или json. в моем случае это был json, затем я установил http. Теперь это работает.

[[VTNetworkingHelper sharedInstance] performRequestWithPath:@"Your url  " withAuth:YES forMethod:@"POST" withRequestJSONSerialized:NO withParams:params withCompletionHandler:^(VTNetworkResponse *response) {
            if (response.isSuccessful) {
    }else {
    }];

Ответ 5

Я наблюдал, что эта проблема возникает, когда вы продолжаете активный симулятор, и ваш макинджер спать длительное время (скажем, от 5 до 10 часов). Затем внезапно вы запускаете приложение на симуляторе, оно отображает журнал как

NSURLConnection GET request returns Code=-1005 "The network connection was lost."

Решение состоит в том, чтобы просто выйти из симулятора, очистить проект и повторно запустить проект. Это сработало для меня!

Ответ 6

У меня была аналогичная проблема и перезагрузка симулятора не работала. В моем случае я мог ударить по веб-сервису в качестве альтернативы, так как в нечетное время это было бы успешным, и даже за это время он бросил меня с этой ошибкой. Я знаю, что это странно, но так было. Решила его с помощью быстрого подхода:

 let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
                urlconfig.timeoutIntervalForRequest = 1
                urlconfig.timeoutIntervalForResource = 1
                let session = NSURLSession(configuration: urlconfig)

                let task = session.dataTaskWithRequest(request){(data,response,error) in
    //Processing
    }
 task.resume()

Ответ 7

Простое и выборочное решение, проверенное много раз, отлично работает.

//Проверьте ответную ошибку с кодом состояния, и если вы получите -1005, то снова вызовите это api.

                if let strErrorReasonCode : Int = response.response?.statusCode {
                           if authentication_Errors_Range.contains(Alamofire_Error) {
                                self.POST(urlString, paramaters: paramaters, showLoader: showLoader, success: { (responseObject) in
                                    if response.result.isSuccess {
                                        if let value = response.result.value {
                                            let dictResponce = self.isValidated(value as AnyObject)
                                            if dictResponce.0 == true {
                                                success(dictResponce.1)
                                            }
                                            else {
                                                failure(dictResponce.1)
                                            }
                                        }
                                    }
                                }, failure: {_ in
                                    failure(jsonResponce)
                                })
                            }
                 }