Запрос GUR NSURLConnection возвращает -1005, "сетевое соединение потеряно"
Я пытаюсь сделать простой запрос GET, используя NSURLConnection
в XCode 6 (Beta7 2) в iOS 8 SDK, который завершается с ошибкой "Код 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]);
}
Журналы:
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)
7 ответов
Я недавно видел сбой подключения к Интернету на симуляторе iPhone 6, что привело к тем же ошибкам. У моего Mac было рабочее интернет-соединение, а на симуляторе - нет. Перезапуск симулятора исправил проблему.
Я получал эту ошибку последовательно на iOS 9 при определенных сетевых вызовах. Два работали нормально, а два других - нет.
Оказалось, что это вызвано некоторыми неверными параметрами, которые я передавал с телом запроса... Я не ожидал, что это вызовет ошибку -1005... но это произошло.. Избавление от ненужных параметров сделало все Работа!
Я попробовал все предложенное, по крайней мере, в 15 ответах от Google, но ни один из них не решил мою проблему, пока я не попробовал следующее, которое полностью решило мою проблему. Похоже, что соединения Wi-Fi могут быть повреждены на Mac, поэтому, если вы удалите конкретное соединение, которое вы используете, а затем снова подключитесь (выбрав сеть и снова введя свой пароль), то это решит проблему, и больше не будет страшно -1005 Ошибки "потеря сетевого подключения".
- Перейдите к символу Wi-Fi в строке меню вашего Mac и "Отключите Wi-Fi"
- Затем выберите "Открыть настройки сети" (из того же меню внизу).
- В правом нижнем углу панели "Сеть" выберите "Дополнительно".
- Выберите сетевое подключение, к которому вы ранее были подключены.
- Нажмите символ минус прямо под этой таблицей, чтобы удалить это соединение.
- Нажмите "ОК" для этого окна.
- Нажмите "Применить" в окне "Сеть".
- Вернитесь к символу Wi-Fi на панели меню и снова включите Wi-Fi.
- Подождите, пока появится ваше сетевое соединение, а затем выберите его (и теперь оно снова запросит пароль, потому что вы удалили информацию о соединении).
- Теперь он запомнит это обновленное соединение, которое должно решить проблему!
Попробуйте изменить сериализацию запроса в 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 {
}];
Я заметил, что эта проблема возникает, когда вы продолжаете активировать симулятор, и ваш Mac долго спит (скажем, от 5 до 10 часов). Тогда вдруг вы запускаете приложение на симуляторе, он отображает журнал как
NSURLConnection GET request returns Code=-1005 "The network connection was lost."
Решение состоит в том, чтобы просто выйти из симулятора, очистить проект и повторно запустить проект. Это сработало для меня!
У меня была похожая проблема, и перезапуск симулятора не работал. В моем случае я был в состоянии поразить веб-сервис альтернативно, как в нечетное время, это было бы успешно, и в четное время это бросило меня с этой ошибкой. Я знаю, это странно, но это было так или иначе. Решил это со следующим подходом в swift:
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()
Простое и примерное решение, проверенное много раз, работает отлично.
// Проверяем ошибку ответа, используя код состояния, и если вы получите -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)
})
}
}