0

I am looking for a sample to send and receive http GET request in iOS. All I want to do is handle communication in background thread such that it does not block main thread and also want to handle http standard error code. Can anyone suggest me reference code or example to handle http response data and handle proper memory management?

Any help will be thankful.

sam18
  • 631
  • 10
  • 24
  • possible duplicate of [how to send Asynchronous URL Request?](http://stackoverflow.com/questions/8515667/how-to-send-asynchronous-url-request) – Rukshan Marapana Apr 03 '14 at 10:59
  • @whitewolf09 thanks for the link. The accepted answer shows some snippet but it seems incomplete. as it does not mentioned on which thread those callback will be executed. – sam18 Apr 03 '14 at 11:08
  • using this approach your main thread will get notified by delegate methods, when the http request is complete. During the process your main thread will not be blocked. If you like you can use a 3rd party library such as AFNetworking ( https://github.com/AFNetworking/AFNetworking ) which will make your life easier with network related programming – Rukshan Marapana Apr 03 '14 at 11:14

1 Answers1

1

Two methods to achieve it:

1) NSURLCOnnection sendAsynchronousRequest method:

NSString *strURL= [NSString stringWithFormat:@"http://www.google.com/"];
NSURL *URL = [NSURL URLWithString:[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *requestURL = [[NSURLRequest alloc] initWithURL:URL];
[NSURLConnection sendAsynchronousRequest:requestURL
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data,        NSError *error)
 {      
     NSLog(@"Response is:%@",[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
 }];

2) Create and fire request then NSURLConnection Delegate Methods to get the response:

// Create the request.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL     URLWithString:@"http://google.com"]];

// Create url connection and fire request
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

#pragma mark NSURLConnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse  *)response {
// A response has been received, this is where we initialize the instance var you created
// so that we can append data to it in the didReceiveData method
// Furthermore, this method is called each time there is a redirect so reinitializing it
// also serves to clear it
_responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the new data to the instance variable you declared
[_responseData appendData:data];
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
              willCacheResponse:(NSCachedURLResponse*)cachedResponse {
// Return nil to indicate not necessary to store a cached response for this connection 
return nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// The request is complete and data has been received
// You can parse the stuff in your instance variable now

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// The request has failed for some reason!
// Check the error var
}
Jeff Loughlin
  • 3,956
  • 2
  • 28
  • 46
karthikPrabhu Alagu
  • 3,261
  • 1
  • 19
  • 24
  • Thank you i was looking for that first answer! Most useful for downloads within repeated calls like collection views. May I ask why use the `stringByAddingPercentEscapesUsingEncoding` method? – Michael Lorenzo Nov 11 '14 at 07:19