开源中国iOS客户端学习——(五)网络通信ASI类库(1)

转载 2013年12月02日 17:43:25

如今的应用大部分基予网络,在开源中国iOS客户端源码中关于网络通信方面用了三个类库,ASI和AFNetworking,还有一个苹果官方给出的Reachability用于检测当前网络状况,本文介绍当前用的比较多的ASI类库;


ASIHTTPRequest简称ASI,它是对CFNetwork API进行封装,使在与web服务器通信时的繁琐步骤变得容易一些。它是使用Objective-C 编写,能够很好的用在Mac OS X和iPhone应用程序中;它适用于执行基本的HTTP请求和交互基于 REST的服务(GET / POST / PUT /DELETE)互交。

ASIHTTPRequest下载 https://github.com/pokeb/asi-http-request/tree

关于ASI类库介绍在  http://allseeing-i.com/ASIHTTPRequest/

添加ASI到你工程中步骤 http://allseeing-i.com/ASIHTTPRequest/Setup-instructions


ASI特点

l通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 

l下载的数据,可存储到内存中或直接存储到磁盘中 

l能上传本地文件到服务端 

l可以方便的访问和操作请求和返回的Http头信息 

l可以获取到上传或下载的进度信息,为应用程序提供更好的体验 

l支持上传或下载队列,并且可获取队列的进度信息 

l支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在KeychainMaciOS操作    系统的密码管理系统)中 

支持Cookie 

l当应用(iOS4+)在后台运行时,请求可以继续运行 

支持GZIP压缩数据 

l内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果 

l ASIWebPageRequest –可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView  /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览 

l支持客户端证书 

l支持通过代理发起Http请求 

l支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使  用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制 

l支持断点续传 

l支持同步和异步请



ASI类库里包括22个文件,4个主要的类ASIHTTPRequest 、ASIFormDataRequest、ASINetworkQueue、ASIDownloadCache,5个支持的类ASIInputStream、ASIDataDecompressor、ASIDataCompressor、ASIAuthenticationDialog、Reachability,4个协议配置文件ASIHTTPRequestDelegate、ASIProgressDelegate、ASICacheDelegate、ASIHTTPRequestConfig.h,这些文件作用在开发文档中都有详细介绍.


http://allseeing-i.com/ASIHTTPRequest/How-to-use有关于初次接触ASI的简单使用,很有必要看一看,

了解简单的同步请求、异步请求,block块请求,队列请求等其他用法。


用ASI写的一个简单请求数据的Demo:

测试使用的URL是国家气象局API,返回一个json数据

#define URL @"http://www.weather.com.cn/data/sk/101010100.html"


请求得到数据:



  1. //同步请求  
  2. - (IBAction)synchronization_bt:(id)sender {  
  3.       
  4.     NSURL *url = [NSURL URLWithString:URL];  
  5.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  6. //    启动同步方式访问  
  7.     [request startSynchronous];  
  8.       
  9.     NSError *error = [request error];  
  10. //    请求成功  
  11.     if (!error) {  
  12.         NSString *response = [request responseString];  
  13.         NSLog(@"请求数据:%@",response);   
  14.     }  
  15.     }  
  16.       
  17. }  

  1. //异步请求  
  2. - (IBAction)asynchronous_bt:(id)sender {  
  3.     NSURL *url = [NSURL URLWithString:URL];  
  4.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5.     [request setDelegate:self];  
  6. //    启动异步方式访问  
  7.     [request startAsynchronous];  
  8. }  
  9.   
  10.   
  11. //异步请求Delegate Methods  
  12. -(void)requestFinished:(ASIHTTPRequest *)request  
  13. {  
  14.     NSString *responseString = [request responseString];  
  15.     NSLog(@"请求的String数据:%@",responseString);  
  16. //   以 二进制文件形式存储  
  17.     NSData *responseData = [request responseData];  
  18.     NSLog(@"请求的Data数据:%@",responseData);  
  19.       
  20. }  
  21. -(void)requestFailed:(ASIHTTPRequest *)request  
  22. {  
  23.     NSError *error = [request error];  
  24.     NSLog(@"Error:%@",error.userInfo);  
  25.   
  26. }  

  1. //block块请求  
  2. - (IBAction)blocks_tn:(id)sender {  
  3.     NSURL *url = [NSURL URLWithString:URL];  
  4.     __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5.     [request setCompletionBlock:^{  
  6.         NSString *responseString = [request responseString];  
  7.         NSLog(@"请求的String数据:%@",responseString);  
  8.           
  9.     }];  
  10.     [request setFailedBlock:^{  
  11.         NSError *error = [request error];  
  12.          NSLog(@"Error:%@",error.userInfo);  
  13.     }];  
  14.     [request startAsynchronous];  
  15. }  

  1. //队列请求  
  2. - (IBAction)queue_bt:(id)sender {  
  3.       
  4.     if (![self queue]) {  
  5.         [self setQueue:[[[NSOperationQueue alloc]init]autorelease]];  
  6.     }  
  7.     NSURL *url = [NSURL URLWithString:URL];  
  8.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  9.     [request setDelegate:self];  
  10.     [request setDidFinishSelector:@selector(requestDone:)];  
  11.     [request setDidFailSelector:@selector(requestWentWrong:)];  
  12.     [[self queue] addOperation:request];  
  13. }  
  14.   
  15. -(void)requestDone:(ASIHTTPRequest *)request  
  16. {  
  17.     NSString *response = [request responseString];  
  18.     NSLog(@"请求的数据:%@",response);  
  19. }  
  20.   
  21. -(void)requestWentWrong:(ASIHTTPRequest *)request  
  22. {  
  23.     NSError *error = [request error];  
  24.     NSLog(@"Error:%@",error.userInfo);  
  25. }  

将类库加入到工程中不要忘了添加支持的framework框架和库:

SystemConfiguration.framework, MobileCoreServices.framework, CoreGraphics.framework 和 libz.dylib.


源代码:http://download.csdn.net/detail/duxinfeng2010/4947729



ASIHTTPRequest中文文档:


 http://www.dreamingwish.com/dream-2011/apples-third-party-development-libraries-asihttprequest.html



正在学习过程中,错误之处请指正,欢迎交流,共同学习;

欢迎转载分享,请注明出处http://blog.csdn.net/duxinfeng2010




举报

相关文章推荐

开源中国iOS客户端学习——(五)网络通信ASI类库(1)

转载自:http://blog.csdn.net/duxinfeng2010/article/details/8453749   开源中国iOS客户端学习——(五)网络通信AS...

开源中国iOS客户端学习——(八)网络通信AFNetworking类库

转载自:http://blog.csdn.net/duxinfeng2010/article/details/8620901   开源中国iOS客户端学习——(八)网络通信AF...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

开源中国iOS客户端学习——(十二)用户登陆

上一篇博客  开源中国iOS客户端学习——(十一)AES加密 中提到将用户名和密码保存到了本地沙盒之中,在从本地读取用户名和密码,这是一个怎样的过程? -(void)saveUserNameAndP...

开源中国iOS客户端学习——(四)GCDiscreetNotificationView提示视图

GCDiscreetNotificationView 类库作用是: 在不阻止用户与设备应用程序交互情况下,作为一个通知视图来显示一个当前的状态。 GCDiscreetNotificationVi...

开源中国iOS客户端学习——(十四)使用EGOImageLoading异步加载图片

EGOImageLoading 是一个用的比较多的异步加载图片的第三方类库,简化开发过程,我们直接传入图片的url,这个类库就会自动帮我们异步加载和缓存工作;当从网上获取图片时,如果网速慢图片短时间内...

开源中国iOS客户端学习——(九)代码片段之时间标记

开源中国客户端中无论是综合里面文章,还是问答里问题还是动弹离得说说,每一条后面都会注释有时间,比如“10分钟之前”  “2小时前” “5天前” 或者直接是时间显示“2013-2-9”等,这些时间在很多...

开源中国iOS客户端学习——(一)Prefix.pch文件

当我们新建一个工程的时候,在Supporting FIles文件下会看到一个以  -Prefix.pch结尾文件的文件,pch全称是“precompiled header”,也就是预编译头文件,该文件...

开源中国iOS客户端学习——(三)再看协议与委托

iOS里委托与协议是很重要的一块,如果理解不好很难区分协议与委托到底有什么不一样,这些东西在开发中是经常遇见的; 协议是类留给外部的一个接口函数的集合(一位高手用C++基类来解释是,把接口做为参数,...

开源中国iOS客户端学习——(七)MBProgressHUD特效

在开源中国iOS客户端中也用到了MBProgressHUD这个特效,主要作用为应用显示一个过渡的作用,常用于打开一个联网页面加载过程,防止出现假死现象,如果网速慢则告诉用户已经在很努力很努力的加载中。...

开源中国iOS客户端学习——(十三)使用UIWebView控件布局视图

在上一篇博客   开源中国iOS客户端学习——(十二)用户登陆  中讲到用户登陆界面,loginView.xib布局中我们看到有一个UIWebView控件,但是它并没有加载一个网页,而是显示一些文...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)