Setting custom HTTP request headers with RestKit
RestKit is a great REST framework for Objective-C whose goal is to simplify consuming and modeling of RESTful APIs.
I am using RestKit in an application that is synchronizing data between the client application and a remote server. I want to specify a custom HTTP header when sending the request to the remote server. With RestKit, it's actually really easy, but I wanted to document it here.
This assumes that you have already performed the initialization of the RestKit client, which is an instance of the
In my project, I am using the object manager for mapping between the data payloads and Objective-C objects, so I will get access to the client instance through the shared object manager singleton.
The first step is to get access to this client:
RKObjectManager *objectManager = [RKObjectManager sharedManager]; RKClient *client = objectManager.client;
Then, it's as simple as calling the client's
[client setValue:[NSString stringWithFormat:@"%d", [lastUpdated intValue]] forHTTPHeaderField:@"X-RESTKIT-LASTUPDATED"];
Here, I am using the
lastUpdated NSNumber, which I am creating a string from the integer value.
This is a unix timestamp that I am going to send to my REST service for determining the last time the client was updated, so I can just send the records that have been updated since then.
I am setting the value for the HTTP header called "X-RESTKIT-LASTUPDATED".
Pretty easy, thanks to RestKit.
Setting HTTP Request header without using RestKit
RestKit does a nice job ofabstracting the details of using the native
But, what if we were doing the request manually without using RestKit.
Well, it's actually still fairly easy to set a custom HTTP request header.
First, we will create a new
NSURLRequest, which we will use for creating the
NSString *myServerUrl = @"http://brianflove.com"; NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:[myServerUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; [request setValue:[NSString stringWithFormat:@"%d", [lastUpdated intValue]] forHTTPHeaderField:@"X-LASTUPDATED"];
We then use the request object to create the
NSURLConnection and fire off the request:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];