2014-05-14 2 views
0

J'essaie de comprendre comment utiliser et avoir la bonne valeur de l'appel apk longbox_delta dropbox. Je réussis à récupérer la valeur du curseur, mais toujours obtenir le code 400 en réponse. Quelqu'un peut-il m'aider à le réparer ou m'aider à comprendre où je me trompe? Pour tester rapidement j'ai configuré la demande avec AFNetworking. Sous l'exemple de code. MerciiOS utiliser dropbox longpool_delta api

NSString *myUrl = @"https://api.dropbox.com/1/delta/"; 

NSURL *url = [NSURL URLWithString:myUrl]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

//here set the header with access token with oAuth2 api 
[request setValue: [self headerForApiCall] forHTTPHeaderField:@"Authorization"]; 
request.timeoutInterval = 90.0; 
[request setHTTPMethod:@"POST"]; 

__weak typeof(self) weakSelf = self; 

AFJSONRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 

NSString* cursor = JSON[@"cursor"]; 
NSString *myUrl = [NSString stringWithFormat:@"https://api-notify.dropbox.com/1/longpoll_delta/?cursor=%@",cursor]; 
NSURL *url = [NSURL URLWithString:myUrl]; 
NSMutableURLRequest *request2 = [NSMutableURLRequest requestWithURL:url]; 
request2.timeoutInterval = 90.0; 
[request2 setHTTPMethod:@"GET"]; 

AFJSONRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request2 success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 

     NSLog(@"long %@",JSON); 

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 

NSLog(@"failure long %@",response.description); 

}]; 

[operation start]; 



} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
NSLog(@"failure %@",response.description); 
}]; 

[operation start]; 

[modifier] Comme suggéré ici le code de réponse 400 du bloc d'échec

status code: 400, headers { 
"Cache-Control" = "no-cache"; 
Connection = "keep-alive"; 
"Content-Type" = "text/plain"; 
Date = "Wed, 14 May 2014 16:04:28 GMT"; 
Pragma = "no-cache"; 
Server = nginx; 
"Transfer-Encoding" = Identity; 
"X-DB-Timeout" = 120; 
} 

suppression / la réponse toujours du bloc d'échec, mais avec une valeur (null)

+0

Si la réponse de @ BoilingLime est pas correct, s'il vous plaît nous dire le corps de la réponse 400. Il devrait vous dire la raison de l'erreur. – smarx

Répondre

0

Erreur 400 est de mauvais paramètres, je pense que votre problème est ici:

NSString *myUrl = [NSString stringWithFormat:@"https://api-notify.dropbox.com/1/longpoll_delta/?cursor=%@",cursor]; 

Essayez de retirer le / entre longpoll_delta et ? comme suit:

NSString *myUrl = [NSString stringWithFormat:@"https://api-notify.dropbox.com/1/longpoll_delta?cursor=%@",cursor]; 

Par ailleurs devrait créer un client Dropbox HTTP qui vous aidera beaucoup à gérer votre demande. Créez une classe qui hérite de AFHTTPClient. votre créer un singleton comme suit:

+ (DBAPIClient *)sharedClientWithBaseUrl:(NSString *)baseUrl { 
static DBAPIClient *sharedInstance = nil; 
static dispatch_once_t apiToken; 
dispatch_once(&apiToken, ^{ 
    sharedInstance = [[DBAPIClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://api.dropbox.com/1/"]]; 
    // Do any other initialisation stuff here 
}); 
return sharedInstance; 
} 

- (id)initWithBaseURL:(NSURL *)url { 
self = [super initWithBaseURL:url]; 
if (!self) { 
    return nil; 
} 

return self; 
} 

De cette façon, vous serez en mesure d'utiliser comme ce qui est beaucoup plus simple:

NSDictionary *params = // Your params; 

[[DBPIClient sharedClient] 
getPath://the endpoint you want access to 
parameters:params 
success:^(AFHTTPRequestOperation *operation, id JSON) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

}];