2013-05-17 2 views
5

Недавно я следил за CodeSchool course to learn iOS, и они рекомендуют использовать AFNetworking для взаимодействия с сервером.Добавление параметров для запроса с использованием AFNetworking

Я пытаюсь получить JSON с моего сервера, но мне нужно передать некоторые параметры URL-адресам. Я не хочу добавлять эти параметры в URL, поскольку они содержат пароли пользователей.

Для простого запроса URL у меня есть следующий код:

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

Я проверил документацию NSURLRequest, но не получил ничего полезного там.

Как передать имя пользователя и пароль для этого запроса, чтобы их читать на сервере?

ответ

6

Вы можете использовать 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]; 

В идеале, вы бы подкласс AFHTTPClient и использовать его метод postPath:parameters:success:failure:, вместо того чтобы создавать операцию вручную и запустить его.

2

Вы можете установить параметры POST на NSURLRequest так:

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

Другими словами, вы создаете строку запроса точно так же, как если бы вы были проходящее параметры в URL, но установить метод для POST и поместите строку в тело HTTP, а не после ? в URL.

+0

Да, за сценой HTTPClient ** requestWithMethod: путь: параметры: ** – onmyway133

Смежные вопросы