AFNetworking 2.0 add headers to GET request AFNetworking 2.0 add headers to GET request ios ios

AFNetworking 2.0 add headers to GET request


Here's an example using AFNetworking 2.0

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFJSONResponseSerializer serializer];manager.requestSerializer = [AFJSONRequestSerializer serializer];[manager.requestSerializer setValue:@"calvinAndHobbesRock" forHTTPHeaderField:@"X-I do what I want"];[manager GET:@"http://localhost:3000" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"JSON: %@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"Error: %@", error);}];

The key are the following 2 lines:

manager.requestSerializer = [AFJSONRequestSerializer serializer];[manager.requestSerializer setValue:@"calvinAndHobbessRock" forHTTPHeaderField:@"X-I-do-what-I-want"];


The fantastic documentation for AFNetworking 2.0 makes this a little hard to find, but it is there. On the AFHTTPRequestSerializer is -setValue:forHTTPHeaderField:.

Alternatively, if you follow their recommended approach of creating a session manager that derives from AFHTTPSessionManager then that class can override a method to modify headers on each request -dataTaskWithRequest:completionHandler:. I use this to inspect requests and modify headers on a case-by-case basis, and prefer it to modifying the serializer as it keeps the responsibility for networking contained in that manager (and avoids mucking with singletons)

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *, id, NSError *))completionHandler{    static NSString *deviceId;    if(!deviceId)    {        deviceId = [[[UIDevice currentDevice] identifierForVendor] UUIDString];    }    NSMutableURLRequest *req = (NSMutableURLRequest *)request;    // Give each request a unique ID for tracing    NSString *reqId = [NSString stringWithFormat:@"%@+%@", deviceId, [[NSUUID UUID] UUIDString] ];    [req setValue:reqId forHTTPHeaderField:"x-myapp-requestId"];    return [super dataTaskWithRequest:req completionHandler:completionHandler];}


adding response and request serializer solved my problem.

manager.responseSerializer = [AFJSONResponseSerializer serializer];manager.requestSerializer = [AFJSONRequestSerializer serializer];[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];