sam18
sam18

Reputation: 641

how to send http request from non ui thread in ios

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.

Upvotes: 0

Views: 1472

Answers (1)

karthikPrabhu Alagu
karthikPrabhu Alagu

Reputation: 3401

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
}

Upvotes: 1

Related Questions