iOS中发送HTTP请求的方案
2016-04-03 19:25
501 查看
在iOS中,常见的发送HTTP请求的方案有
苹果原生(自带)
NSURLConnection:用法简单,最古老最经典的一种方案
NSURLSession:功能比NSURLConnection更加强大,推荐使用这种技术(2013年推出)
CFNetwork:NSURL的底层,纯C语言
第三方框架
ASIHttpRequest:外号:“HTTP终结者”,功能及其强大,早已不维护
AFNETworking:简单易用,提供了基本够用的常用功能,维护和使用者居多
MKNetworkKit:简单易用,来自印度,维护使用者少
建议
为了提高开发效率,企业开发用的基本是第三方框架
一.使用NSURLConnection
NSURLConnection常见的发送请求方法有以下几种
代理相关的方法
View Code
二.使用AFNetworking框架
网址:https://github.com/AFNetworking/AFNetworking
AFHTTPRequestOperationManager内部包装了NSURLConnection
AFHTTPSessionManager内部包装了NSURLSession
AFN这个框架默认使用了JSON解析器,如果服务器返回的是XML格式的
你需要将框架中的解析器换成XML解析器
苹果原生(自带)
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;
代理相关的方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]]; NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123"]]; //启动 [task resume]; } #pragma mark -<NSURLSessionDataDelegate> /** * 1.接收到服务器的响应 */ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { NSLog(@"----%s----",__func__); //允许处理服务器的响应 completionHandler(NSURLSessionResponseAllow); } /** * 2.接收到服务器的数据(可能会被调用多次) */ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { NSLog(@"----%s----",__func__); } /** * 3.请求成功或者失败(如果失败,error有值) */ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { NSLog(@"----%s----",__func__); }
View Code
二.使用AFNetworking框架
网址:https://github.com/AFNetworking/AFNetworking
AFHTTPRequestOperationManager内部包装了NSURLConnection
- (void)get { AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [mgr GET:@"http://120.25.226.186:32812/login" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"请求成功----%@",[responseObject class]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败----%@",error); }]; }
AFHTTPSessionManager内部包装了NSURLSession
- (void)get2 { //AFHTTPSessionManager内部包装了NSURLSession AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [mgr GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功----%@",[responseObject class]); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败----%@",error); }]; }
AFN这个框架默认使用了JSON解析器,如果服务器返回的是XML格式的
你需要将框架中的解析器换成XML解析器
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; //responseSerializer 用来解析服务器返回的数据 //告诉AFN 以XML形式解析服务器返回的数据 mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
相关文章推荐
- [置顶] Android开发之http网络请求返回码问题集合。
- linux NFS网络文件系统
- linux命令--tcpdump
- 【linux】记一次httpd服务正常,http不能访问的惨痛教训
- 《浅谈HTTP协议》
- java网络编程
- [Angular 2] Async Http
- HTTP状态码一览表
- iOS UILabel显示网络图片 NSMutableAttributedString使用网络图片
- FTP 、TFTP、HTTP
- CentOS 6.7 禁用 IPV6网络的方法
- volley Post网络请求
- 【Java网络编程】Socket的使用
- 【unp】unix网络编程卷1-->环境搭建(ubuntu14.04)
- 拥塞避免算法和慢启动算法的共同作用
- 计算机网络overview-2
- Android网络与数据存储_学习笔记_第六周:SQLite与ContentProvider
- Tilera多线程网络编程总结
- 以太网,IP,TCP,UDP数据包分析
- jboss tomcat 配置https请求方式