I've checked for other questions relevant to this, but the only answer is "Use ASIHTTPRequest
" as this is no longer being developed I wanted to ask what alternatives people are using, whilst working on our SDK I came across a lot of strange behaviour in NSURLConnection
when receiving data from the server.
We tracked it down to the fact that NSURLConnection
doesn't deal well with responses in chunked-encoding. Or at least so we read in this question here NSURLConnection and "chunked" transfer-coding
Some developers we were talking to say it gets better in iOS 5, we need to make sure that our SDK is backwards compatible with iOS 4.3 at least.
I want to confirm this is infact an issue in NSURLConnection
, and how people are dealing with it.
All the alternatives I've found so far are based off of NSURLConnection
and I'm assuming as such will have the same flaw. ASIHTTPRequest
did in fact work because it's based a little lower than NSURLConnection
, but were looking for alternatives in the knowledge it's no longer supported.
A list of other libraries looked at are:
Restkit
,
ShareKit
,
LRResty
,
AFNetworking
,
TTURLRequest
I'm aware there are similar questions here Is RESTKit a good replacement for ASIHTTPRequest? and here ASIHTTPRequest alternative But both of the solutions are based off NSURLConnection.
EDIT: I noticed I pointed to the wrong question at the start of my post, so thats updated. It points to a thread from 2008, and i've seen similar ones but none that are recent.
Chunked transfers are supported by NSURLConnection. I use them.
Define some props:
NSMutableData * responseData; NSURLConnection * connection;
Establish a connection
NSURL *url = [NSURL URLWithString:@"...."]; self.responseData = [[NSMutableData alloc] initWithLength:0] ; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
Register your callback method for connection established
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { // You may have received an HTTP 200 here, or not... [responseData setLength:0]; }
Register your callback method for "chunk received"
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSString* aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"This is my first chunk %@", aStr); }
Register your "connection finished" callback:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { [connection release]; }
And finally, register you "connection failed" callback:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"Something went wrong..."); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With