Question La requête NSURLConnection GET renvoie -1005, "la connexion réseau a été perdue"


J'essaie de faire une simple requête GET en utilisant NSURLConnection dans XCode 6 (Beta7 2) sur iOS 8 SDK, ce qui échoue avec "Code 1005, la connexion réseau a été perdue". L'appel échoue lorsque j'essaie de récupérer http://www.google.com ou quelques autres exemples de pages du Web, mais réussit si je fais une demande à un serveur HTTP simple sur localhost (python -m SimpleHTTPServer). J'ai aussi essayé d'utiliser AFNetworking library (2.4.1) - Les URL qui échouent avec NSURLConnection échouent également avec la bibliothèque.

Voici mon code -

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]);
}

Journaux:

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)

43
2017-09-11 21:35


origine


Réponses:


J'ai vu la connectivité Internet échouer sur le simulateur iPhone 6 récemment, entraînant les mêmes erreurs. Mon Mac avait une connexion Internet qui fonctionnait, mais pas le simulateur. Le redémarrage du simulateur a résolu le problème.


92
2017-09-11 22:14



Je recevais systématiquement cette erreur sur iOS 9 avec certains appels réseau. Deux travaillaient bien mais deux autres ne l'étaient pas.

Il s'est avéré être causé par des paramètres incorrects que je transmettais avec le corps de la requête ... Je ne m'attendais pas à ce que cela cause une erreur -1005 ... mais ça s'est fait. travail!


8
2017-12-09 14:26



J'ai essayé tout ce qui est suggéré sur au moins 15 réponses de Google, mais aucun d'entre eux n'a résolu mon problème avant d'avoir essayé les solutions suivantes, qui répondaient parfaitement à mon problème. Il semble que les connexions Wi-Fi peuvent être corrompues sur le Mac. Si vous supprimez la connexion spécifique que vous utilisez et que vous vous connectez à nouveau (en sélectionnant à nouveau le réseau et en saisissant votre mot de passe), le problème sera résolu. "La connexion réseau a été perdue" erreurs.

  • Accédez au symbole Wi-Fi sur la barre de menus de votre Mac et "Désactiver le Wi-Fi"
  • Puis choisissez "Ouvrir les préférences réseau" (dans le même menu, en bas).
  • Dans le coin inférieur droit du panneau Réseau, choisissez "Avancé".
  • Sélectionnez la connexion réseau à laquelle vous étiez précédemment connecté.
  • Appuyez sur le symbole moins juste en dessous de cette table pour supprimer cette connexion.
  • Appuyez sur "OK" pour cette fenêtre.
  • Hit "Appliquer" sur la fenêtre du réseau.
  • Revenez au symbole Wi-Fi sur votre barre de menus et réactivez le Wi-Fi.
  • Attendez que votre connexion réseau apparaisse, puis sélectionnez-la (et il vous demandera à nouveau un mot de passe car vous avez supprimé les informations de connexion).
  • Il va maintenant se souvenir de cette nouvelle connexion qui devrait résoudre le problème!

2
2018-06-12 02:37



Essayez de modifier la sérialisation des requêtes dans AFNetworking http ou json. dans mon cas, c'était json puis je mis à http. Maintenant ça marche.

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

1
2018-05-27 10:54



J'ai observé que ce problème se produit lorsque vous maintenez le simulateur actif et que votre mac s'endort pendant une longue durée (par exemple, 5 à 10 heures). Puis, tout à coup, vous exécutez l'application sur le simulateur, il affiche log comme

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

La solution est de quitter simplement simulateur, projet propre et relancer le projet. Cela a fonctionné pour moi!


0
2017-08-27 05:49



J'ai eu un problème similaire et le redémarrage du simulateur n'a pas fonctionné. Dans mon cas, j'ai été en mesure de frapper le service Web alternativement, comme dans les temps impairs, il serait réussi et même temps il m'a jeté avec cette erreur. Je sais que c'est bizarre mais c'était le cas en quelque sorte. Résolu avec l'approche suivante en 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()

0
2018-02-14 11:52



Solution simple et échantillon, testée à plusieurs reprises, fonctionnant parfaitement.

// Vérifiez l'erreur de réponse à l'aide du code d'état et si vous obtenez -1005, appelez à nouveau cette 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)
                                })
                            }
                 }

-1
2017-08-25 06:31