在iOS中,常见的发送HTTP请求的方案有
苹果原生(自带)
- NSURLConnection:用法简单,最古老最经典的一种方案
- NSURLSession:功能比NSURLConnection更加强大,推荐使用这种技术(2013年推出)
- CFNetwork:NSURL的底层,纯C语言
第三方框架
- ASIHttpRequest:外号:“HTTP终结者”,功能及其强大,早已不维护
- AFNETworking:简单易用,提供了基本够用的常用功能,维护和使用者居多
- MKNetworkKit:简单易用,来自印度,维护使用者少
建议
为了提高开发效率,企业开发用的基本是第三方框架
一.使用NSURLConnection
NSURLConnection常见的发送请求方法有以下几种
//同步请求 + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
//异步请求:根据对服务器返回数据的处理方式的不同,又可以分为2种 //block回调 + (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler; //代理 - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; + (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate; - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;
代理相关的方法
#pragma mark -NSURLConnectionDelegate - begin /** 请求失败(比如请求超时) */ - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { } /** 接收到服务器的响应 */ - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"didReceiverResponse"); //初始化 self.responseData = [NSMutableData data]; } /** 接收到服务器的数据(如果数据量比较大,这个方法会调用多次) */ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"didReceiveData - %zd",data.length); //拼接 [self.responseData appendData:data]; } /** 服务器的数据成功,接收完毕 */ - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading"); //显示数据 NSString *str = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); }
二.使用NSURLSession
使用NSURLSession对象创建Task,然后执行Task
1.使用NSURLSessionDataTask
post请求