AFNetworking Post Request
It's first worth adding (as this answer is still popular 6 years after I initially wrote it...) that the first thing you should consider is whether you should even use AFNetworking. NSURLSession was added in iOS 7 and means you don't need to use AFNetworking in many cases - and one less third party library is always a good thing.
For AFNetworking 3.0:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];NSDictionary *params = @{@"user[height]": height, @"user[weight]": weight};[manager POST:@"https://example.com/myobject" parameters:params progress:nil success:^(NSURLSessionTask *task, id responseObject) { NSLog(@"JSON: %@", responseObject);} failure:^(NSURLSessionTask *operation, NSError *error) { NSLog(@"Error: %@", error);}];
For AFNetworking 2.0 (and also using the new NSDictionary syntax):
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];NSDictionary *params = @{@"user[height]": height, @"user[weight]": weight};[manager POST:@"https://example.com/myobject" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error);}];
If you are stuck using AFNetworking 1.0, you need to do it this way:
NSURL *url = [NSURL URLWithString:@"https://example.com/"];AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: height, @"user[height]", weight, @"user[weight]", nil];[httpClient postPath:@"/myobject" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"Request Successful, response '%@'", responseStr);} failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);}];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: height, @"user[height]", weight, @"user[weight]", nil];AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL: [NSURL URLWithString:@"http://localhost:8080/"]];[client postPath:@"/mypage.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *text = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"Response: %@", text);} failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", [error localizedDescription]);}];
Here is a simple AFNetworking POST I'm using. To get up and running afterreading the AFNetworking doc, wkiki, ref, etc, I learned a lot byfollowing http://nsscreencast.com/episodes/6-afnetworking and understandingthe associated code sample on github.
// Add this to the class you're working with - (id)init {} _netInst = [MyApiClient sharedAFNetworkInstance]; // build the dictionary that AFNetworkng converts to a json object on the next line // params = {"user":{"email":emailAddress,"password":password}}; NSDictionary *parameters =[NSDictionary dictionaryWithObjectsAndKeys: userName, @"email", password, @"password", nil]; NSDictionary *params =[NSDictionary dictionaryWithObjectsAndKeys: parameters, @"user", nil]; [_netInst postPath: @"users/login.json" parameters:params success:^(AFHTTPRequestOperation *operation, id jsonResponse) { NSLog (@"SUCCESS"); // jsonResponse = {"user":{"accessId":1234,"securityKey":"abc123"}}; _accessId = [jsonResponse valueForKeyPath:@"user.accessid"]; _securityKey = [jsonResponse valueForKeyPath:@"user.securitykey"]; return SUCCESS; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"FAILED"); // handle failure return error; } ];