`
yidongkaifa
  • 浏览: 4061419 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

如今的应用大部分基予网络,在开源中国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操作 系统的密码管理系统)中

l支持Cookie

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

l支持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. NSURL*url=[NSURLURLWithString:URL];
  4. ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];
  5. //启动同步方式访问
  6. [requeststartSynchronous];
  7. NSError*error=[requesterror];
  8. //请求成功
  9. if(!error){
  10. NSString*response=[requestresponseString];
  11. NSLog(@"请求数据:%@",response);
  12. }
  13. }
  14. }

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

  1. //block块请求
  2. -(IBAction)blocks_tn:(id)sender{
  3. NSURL*url=[NSURLURLWithString:URL];
  4. __blockASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];
  5. [requestsetCompletionBlock:^{
  6. NSString*responseString=[requestresponseString];
  7. NSLog(@"请求的String数据:%@",responseString);
  8. }];
  9. [requestsetFailedBlock:^{
  10. NSError*error=[requesterror];
  11. NSLog(@"Error:%@",error.userInfo);
  12. }];
  13. [requeststartAsynchronous];
  14. }

  1. //队列请求
  2. -(IBAction)queue_bt:(id)sender{
  3. if(![selfqueue]){
  4. [selfsetQueue:[[[NSOperationQueuealloc]init]autorelease]];
  5. }
  6. NSURL*url=[NSURLURLWithString:URL];
  7. ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];
  8. [requestsetDelegate:self];
  9. [requestsetDidFinishSelector:@selector(requestDone:)];
  10. [requestsetDidFailSelector:@selector(requestWentWrong:)];
  11. [[selfqueue]addOperation:request];
  12. }
  13. -(void)requestDone:(ASIHTTPRequest*)request
  14. {
  15. NSString*response=[requestresponseString];
  16. NSLog(@"请求的数据:%@",response);
  17. }
  18. -(void)requestWentWrong:(ASIHTTPRequest*)request
  19. {
  20. NSError*error=[requesterror];
  21. NSLog(@"Error:%@",error.userInfo);
  22. }

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

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


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



ASIHTTPRequest中文文档:





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

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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics