Hardik Amal
Hardik Amal

Reputation: 1353

AFNetworking response failure block is called instead of success block

AFNetworking response failure block is being called when I get status code 200. How can I make the success be called instead?

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         self.clientToken = responseObject[@"customerID"];
         NSLog(@"Client Token received.");
     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         // Handle failure communicating with your server
         NSLog(@"Client Token request failed.%@",operation.responseString);
         NSLog(@"error code %ld",(long)[operation.response statusCode]);
     }];

Upvotes: 5

Views: 3523

Answers (5)

vaibby
vaibby

Reputation: 1265

try this

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

and in success block

 success:^(AFHTTPRequestOperation *operation, id responseObject) {
     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:manager.responseData options:kNilOptions error:nil];
     self.clientToken = dic[@"customerID"];
     NSLog(@"Client Token received.");
 }

Upvotes: 0

Lalji
Lalji

Reputation: 695

I run this code and it work find.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                              options:kNilOptions
                                                                error:nil];
         self.clientToken = json[@"customerID"];
         NSLog(@"Client Token received.");
     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         // Handle failure communicating with your server
         NSLog(@"Client Token request failed.%@",operation.responseString);
         NSLog(@"error code %ld",(long)[operation.response statusCode]);
     }];

responce is:

json:
{
    customerID = "eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiJhMjg2OGVjY2FmZjNjMTQ0M2Y4MTg2MjQ4NDFhZDIyZGM3MWFhOTQ0MmFiMTY2NWVlNWY1YjJkODdiOTVhYzBjfGNyZWF0ZWRfYXQ9MjAxNS0wNS0xNFQxMzoyMDowNi45NjE2NDQxNzArMDAwMFx1MDAyNm1lcmNoYW50X2lkPXpxZDlkcGpmZmRzazd4bnlcdTAwMjZwdWJsaWNfa2V5PWRoeTdqeGt6Z3Y4d3dkcGoiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbImN2diJdLCJlbnZpcm9ubWVudCI6InNhbmRib3giLCJjbGllbnRBcGlVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpIiwiYXNzZXRzVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhdXRoVXJsIjoiaHR0cHM6Ly9hdXRoLnZlbm1vLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhbmFseXRpY3MiOnsidXJsIjoiaHR0cHM6Ly9jbGllbnQtYW5hbHl0aWNzLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20ifSwidGhyZWVEU2VjdXJlRW5hYmxlZCI6ZmFsc2UsInBheXBhbEVuYWJsZWQiOnRydWUsInBheXBhbCI6eyJkaXNwbGF5TmFtZSI6InVzYyIsImNsaWVudElkIjpudWxsLCJwcml2YWN5VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3BwIiwidXNlckFncmVlbWVudFVybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS90b3MiLCJiYXNlVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhc3NldHNVcmwiOiJodHRwczovL2NoZWNrb3V0LnBheXBhbC5jb20iLCJkaXJlY3RCYXNlVXJsIjpudWxsLCJhbGxvd0h0dHAiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjp0cnVlLCJlbnZpcm9ubWVudCI6Im9mZmxpbmUiLCJ1bnZldHRlZE1lcmNoYW50IjpmYWxzZSwiYnJhaW50cmVlQ2xpZW50SWQiOiJtYXN0ZXJjbGllbnQzIiwibWVyY2hhbnRBY2NvdW50SWQiOiI2ejl3eGtkanlyNnQzbmg1IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sImNvaW5iYXNlRW5hYmxlZCI6ZmFsc2UsIm1lcmNoYW50SWQiOiJ6cWQ5ZHBqZmZkc2s3eG55IiwidmVubW8iOiJvZmYifQ==";
}

It may be work for you.

Upvotes: 1

Inder Kumar Rathore
Inder Kumar Rathore

Reputation: 39978

If you check your error in failure block it clearly say that invalid content type. You need to set the content type of the manager as follows

manager.requestSerializer = [AFJSONRequestSerializer serializer];

Upvotes: 0

kernix
kernix

Reputation: 8490

use acceptableStatusCodes as follows:

 AFHTTPRequestOperationManager *manager =  [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [TimeoutAFJSONRequestSerializer serializer];
NSMutableIndexSet* codes = [[NSMutableIndexSet alloc] init];
[codes addIndex: 200];
manager.responseSerializer.acceptableStatusCodes = codes;

[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
 {


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

Upvotes: 2

Rob Napier
Rob Napier

Reputation: 299275

Look at the value of error. It will tell you why the connection failed. "Failure" in this context has nothing to do with the status code. Returning "404" is still a "success." Failure means you were unable to complete the operation.

Upvotes: 5

Related Questions