2013-05-17 16 views
5

Ho seguito di recente lo CodeSchool course to learn iOS e consigliamo di utilizzare AFNetworking per interagire con il server.Aggiunta di parametri per richiedere con AFNetworking

Sto cercando di ottenere un JSON dal mio server, ma ho bisogno di passare alcuni parametri agli URL. Non desidero aggiungere questi parametri all'URL poiché contengono password utente.

Per una semplice richiesta di URL che ho il seguente codice:

NSURL *url = [[NSURL alloc] initWithString:@"http://myserver.com/usersignin"]; 
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
     JSONRequestOperationWithRequest:request 
       success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
         NSLog(@"%@",JSON); 
       } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
         NSLog(@"NSError: %@",error.localizedDescription);    
       }]; 

[operation start]; 

Ho controllato la documentazione di NSURLRequest ma non ha ottenuto qualcosa di utile da lì.

Come devo passare un nome utente e una password per questa richiesta da leggere sul server?

risposta

6

si può utilizzare un AFHTTPClient:

NSURL *url = [[NSURL alloc] initWithString:@"http://myserver.com/"]; 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSURLRequest *request = [client requestWithMethod:@"POST" path:@"usersignin" parameters:@{"key":@"value"}]; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
    JSONRequestOperationWithRequest:request 
      success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
        NSLog(@"%@",JSON); 
      } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
        NSLog(@"NSError: %@",error.localizedDescription);    
      }]; 

[operation start]; 

Idealmente, si sarebbe sottoclasse AFHTTPClient e utilizzare il suo metodo postPath:parameters:success:failure:, invece di creare un'operazione manualmente e avviarlo.

2

È possibile impostare i parametri POST su un NSURLRequest questo modo:

NSString *username = @"theusername"; 
NSString *password = @"thepassword"; 

[request setHTTPMethod:@"POST"]; 
NSString *usernameEncoded = [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *passwordEncoded = [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSString *postString = [NSString stringWithFormat:[@"username=%@&password=%@", usernameEncoded, passwordEncoded]; 
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

In altre parole, si crea una stringa di query allo stesso modo come se si stesse passando i parametri nell'URL, ma impostare il metodo di POST e inserisci la stringa nel corpo HTTP anziché dopo lo ? nell'URL.

+0

Sì, dietro la scena di HTTPClient ** requestWithMethod: percorso: parametri: ** – onmyway133

Problemi correlati