Je suis nouveau sur objective-c et je rencontre des difficultés avec un réseau AFNetworking.
La chose est donc que je veux faire une simple POST demande à un serveur qui va me renvoyer un sel . Je fais une application simple, afin de tester ma demande, mais je ne comprends pourquoi je reçois le code d'erreur 999.
Voici un échantillon de mon code.
+ (void)simpleRequest; {
NSURL *mailserver = [NSURL URLWithString:@"https://localhost:4443/"];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:mailserver];
manager.securityPolicy.allowInvalidCertificates = TRUE;
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *parameters = @{@"username": @"testtest"};
[manager POST:@"api/v0/login/salt" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
J'ai lié ce code à un simple bouton qui appelle cette fonction.
J'ai une autre application, dans Ruby Motion, qui travaille avec une amende avec cette fonction, je peux obtenir la réponse sans erreur. Mais avec cette application simple, je ne peux faire aucune demande, ils ont tous renvoyé ce code d'erreur 999.
Erreur: Domaine d'erreur = Code NSURLErrorDomain = -999 "annulé" UserInfo = {NSErrorFailingURLKey = https: // hôte local: 4443/api/v0/login/salt , NSLocalizedDescription = annulé, NSErrorFailingURLStringKey = https: // localhost: 4443/api/v0/login/salt }
Donc je me demande vraiment ce que je fais mal, n'importe qui peut m'aider à ce sujet? Merci
MODIFIER:
Est-ce le bon moyen de sauver le gestionnaire dans une propriété ou est-ce que je fais quelque chose de mal? Si c'est le bon moyen, cela semble ne pas fonctionner Merci pour l'aide
fichier .h
@property (nonatomic, retain) AFHTTPSessionManager *session;
fichier .m
@synthesize session;
- (IBAction)log:(id)sender {
NSURL *mailserver = [NSURL URLWithString:@"https://localhost:4443/"];
self.session = [[AFHTTPSessionManager alloc]initWithBaseURL:mailserver];
self.session.securityPolicy.allowInvalidCertificates = TRUE;
self.session.responseSerializer = [AFJSONResponseSerializer serializer];
self.session.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *parameters = @{@"username": @"testtest"};
[self.session POST:@"api/v0/login/salt" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Dans mon cas, le SDK iOS 10 a causé le code d'erreur -999 d'AFNetworking. Si vous essayez d'atteindre un serveur qui utilise le protocole SSL et que vous ne voulez pas l'extraire, ajoutez des règles de confidentialité à Afnetworking
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
[securityPolicy setValidatesDomainName:NO];
C'est l'erreur -999, pas 999. C'est NSURLErrorCancelled
. Votre demande a été annulée avant de pouvoir être complétée.
En regardant votre code, vous ne conservez le AFHTTPSessionManager *manager
nulle part. Cela signifie que le gestionnaire sera supprimé dès le retour de +simpleRequest
. J'imagine que c'est ce qui annule votre demande.
Vous devez enregistrer le gestionnaire afin qu'il vive toute la durée de la demande. Enregistrez-le dans une propriété quelque part.
J'ai remarqué que votre noeud final d'API indique une connexion sécurisée:
httpS: // localhost: 4443/api/v0/login/salt
Essayez juste au cas où, peut-être que cela répète votre situation.
Dans mon cas, c'était une faute de frappe dans le code du gestionnaire d'API. Lequel de la partie peut être dit est connecté avec les paramètres de sécurité de App Transport.
Vient de changer le protocole protégé de httpS://
à http://
et l'erreur:
NSURLErrorDomain Code = -999 "annulé"
était parti et tout a fonctionné !
+ Et aussi si vous aviez un problème similaire. Assurez-vous de discutez-en avec un spécialiste du backend qui s'occupe de la configuration du serveur ou de l'API pour votre application. Cela signifie que le serveur ne dispose pas de certificats de sécurité valides. Peut-être avez-vous encore besoin d'une connexion sécurisée. Ou ce spécialiste peut encore configurer tout le retour de http://
à httpS://
, et je ne suis pas sûr (je n'ai pas vérifié) si cela fonctionnera à nouveau lorsque, dans le code, vous utilisez déjà une connexion http://
non sécurisée.