2013-05-17 4 views
5

Niedawno śledziłem numer CodeSchool course to learn iOS i zalecają używanie AFNetworking do interakcji z serwerem.Dodawanie parametrów do żądania za pomocą AFNetworking

Próbuję uzyskać JSON z mojego serwera, ale muszę przekazać niektóre parametry do adresów URL. Nie chcę dodawać tych parametrów do adresu URL, ponieważ zawierają one hasła użytkownika.

Dla prostego wniosku URL Mam następujący kod:

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

Sprawdziłem dokumentację NSURLRequest ale nie dostał nic użytecznego stamtąd.

Jak przekazać nazwę użytkownika i hasło do tego żądania, aby można je było odczytać na serwerze?

Odpowiedz

6

Można użyć 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]; 

Idealnie chcesz podklasy AFHTTPClient i używać jej metody postPath:parameters:success:failure:, zamiast tworzyć operację ręcznie i uruchomieniem.

2

Można ustawić parametry POST na NSURLRequest ten sposób:

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

Innymi słowy, można utworzyć ciąg kwerendy w ten sam sposób, jak gdybyś przechodzącą parametry w adresie URL, ale ustawić metodę POST i wpisz ciąg w treści HTTP zamiast po ? w adresie URL.

+0

Tak, za sceną HTTPClient ** requestWithMethod: path: parameters: ** – onmyway133