2017-08-10 17 views
0

Je rencontre un problème lors de l'appel de notre API RESTful. La requête est d'obtenir le jeton de l'API; J'ai besoin de ce jeton pour l'utiliser pour faire d'autres appels sur cette API. Le problème est que chaque fois que je fais cet appel, j'obtiens le code d'état HTTP 403 et je ne sais pas pourquoi. Je fais les mêmes appels d'Android mais ils fonctionnent bien sans aucun problème.Appel https https à Restful API

En fait, je n'ai aucune expérience de travail avec xCode; Je suis juste en train d'implémenter quelques changements dans le code existant qui a été écrit par un autre développeur. Je ne sais pas si je fais quelque chose de mal ou quoi.

id keys[] = {@"grant_type", @"client_id", @"client_secret", @"username", @"password"}; 
    id objects[] = {@"password", @"AppClientID", @"AppClientSecret", @"usernamehere", @"userpasswordhere"}; 

    NSUInteger count = sizeof(objects)/sizeof(id); 
    NSDictionary *d = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; 

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:d options:NSJSONWritingPrettyPrinted error:nil]; 

    NSURL *url = [NSURL URLWithString:@"https://oauth-test.websitename.com/token"]; 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; 

    [request setHTTPMethod:@"POST"]; 

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

    [request setValue:@"Basic" forHTTPHeaderField:@"Authorization"]; 
    [request setHTTPBody:jsonData]; 

    [NSURLConnection sendAsynchronousRequest:request 
      queue:[NSOperationQueue mainQueue] 
      completionHandler:^(NSURLResponse *response, 
      NSData *data, NSError *connectionError) { 

       if(data.length > 0 && connectionError == nil) { 
        NSLog(@"Response --> %@ ", response); 
       } 
      } 
    ]; 

Quelqu'un peut-il essayer de m'aider à comprendre ce qui ne va pas? Merci d'avance.

+0

Vous devez utiliser URLSession parce que NSURLConnection est dépréciée dans iOS 10 –

+0

il va résoudre mon problème? ou c'est juste une suggestion? – user2908751

+0

c'est une suggestion et vous pouvez l'essayer –

Répondre

0

j'ai couru votre code et le journal, je reçois est

Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified 
hostname could not be found." UserInfo= 
{NSUnderlyingError=0x608000059aa0 {Error Domain=kCFErrorDomainCFNetwork 
Code=-1003 "A server with the specified hostname could not be found." 
UserInfo={NSErrorFailingURLStringKey=http://oauth- 
test.websitename.com/token, NSErrorFailingURLKey=http://oauth- 
test.websitename.com/token, _kCFStreamErrorCodeKey=8, 
_kCFStreamErrorDomainKey=12, NSLocalizedDescription=A server with the 
specified hostname could not be found.}}, 
NSErrorFailingURLStringKey=http://oauth-test.websitename.com/token, 
NSErrorFailingURLKey=http://oauth-test.websitename.com/token, 
_kCFStreamErrorDomainKey=12, _kCFStreamErrorCodeKey=8, 
NSLocalizedDescription=A server with the specified hostname could not 
be found.} 

Je l'ai essayé avec NSUrlSession aussi, mais il donne même problème. Je pense que votre serveur n'est pas configuré

Voici le code avec la session URL

id keys[] = {@"grant_type", @"client_id", @"client_secret", 
@"username", @"password"}; id objects[] = {@"password", @"AppClientID", @"AppClientSecret", @"usernamehere", @"userpasswordhere"}; 

NSUInteger count = sizeof(objects)/sizeof(id); NSDictionary *d = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; 

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:d options:NSJSONWritingPrettyPrinted error:nil]; 

NSURL *url = [NSURL URLWithString:@"http://oauth-test.websitename.com/token"]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; 

[request setHTTPMethod:@"POST"]; 

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

[request setValue:@"Basic" forHTTPHeaderField:@"Authorization"]; [request setHTTPBody:jsonData]; 

NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
NSURLSessionDownloadTask *dataTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    NSLog(@"%@", response); 

}]; 

[dataTask resume]; 
+0

Oui, je suis sûr que mon code n'atteindra pas le serveur. J'ai changé l'URL ainsi que les valeurs réelles dans l'objet []. Mais oui, j'essaie maintenant avec NSURLSession comme suggéré par vous et Phu Duy – user2908751

+0

Ce que je vous dis est, ci-dessus est le code pour NSUrlSession. Je pense qu'il y a un problème avec votre lien. Si vous pouvez me fournir un autre comme je peux essayer avec ça. –