如今的应用大部分基予网络,在开源中国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身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作    系统的密码管理系统)中

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"

请求得到数据:

//同步请求 - (IBAction)synchronization_bt:(id)sender {          NSURL *url = [NSURL URLWithString:URL];     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; //    启动同步方式访问     [request startSynchronous];          NSError *error = [request error]; //    请求成功     if (!error) {         NSString *response = [request responseString];         NSLog(@"请求数据:%@",response);      }     }      } 
//异步请求 - (IBAction)asynchronous_bt:(id)sender {     NSURL *url = [NSURL URLWithString:URL];     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];     [request setDelegate:self]; //    启动异步方式访问     [request startAsynchronous]; }   //异步请求Delegate Methods -(void)requestFinished:(ASIHTTPRequest *)request {     NSString *responseString = [request responseString];     NSLog(@"请求的String数据:%@",responseString); //   以 二进制文件形式存储     NSData *responseData = [request responseData];     NSLog(@"请求的Data数据:%@",responseData);      } -(void)requestFailed:(ASIHTTPRequest *)request {     NSError *error = [request error];     NSLog(@"Error:%@",error.userInfo);  }
//block块请求 - (IBAction)blocks_tn:(id)sender {     NSURL *url = [NSURL URLWithString:URL];     __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];     [request setCompletionBlock:^{         NSString *responseString = [request responseString];         NSLog(@"请求的String数据:%@",responseString);              }];     [request setFailedBlock:^{         NSError *error = [request error];          NSLog(@"Error:%@",error.userInfo);     }];     [request startAsynchronous]; }
//队列请求 - (IBAction)queue_bt:(id)sender {          if (![self queue]) {         [self setQueue:[[[NSOperationQueue alloc]init]autorelease]];     }     NSURL *url = [NSURL URLWithString:URL];     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];     [request setDelegate:self];     [request setDidFinishSelector:@selector(requestDone:)];     [request setDidFailSelector:@selector(requestWentWrong:)];     [[self queue] addOperation:request]; }  -(void)requestDone:(ASIHTTPRequest *)request {     NSString *response = [request responseString];     NSLog(@"请求的数据:%@",response); }  -(void)requestWentWrong:(ASIHTTPRequest *)request {     NSError *error = [request error];     NSLog(@"Error:%@",error.userInfo); } 

将类库加入到工程中不要忘了添加支持的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

本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208689,如需转载请自行联系原作者

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

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

    AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择: AFNetworking类库×××和使用教程: https://github.com/AFN ...

  2. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

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

    ---------------------------------------------------------------------------------------------------- ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 当我们新建一个工程的时候,在Supporting FIles文件下会看到一个以  -Prefix.pch结尾文件的文件,pch ...

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

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

  6. 开源中国iOS客户端学习——序

    ------------------------------------------------------------------------------------ 2015.8.19 更新 考虑 ...

  7. 开源中国IOS客户端

    自己想看看别人开发的项目,吸收下经验,然后找到开源中国,有些网上的大牛自己也开发出了开源中国的客户端 在网上看到很多网友说,下载下来安装不了之类的东西,在我这里我带个路,希望对那些朋友有些帮助. ht ...

  8. 开源中国android客户端学习 第一天

    源码地址:http://git.oschina.net/oschina/android-app 第一天,看了很久oschina的源码,然后提取了他的头部和底部(本人新手,见谅哈) 效果图

  9. 开源中国Android客户端v2.6.5代码开源啦!

    我们发布了开源中国Android客户端v2.6.5,这个版本中包含了大量的细节改进,感兴趣的朋友们现在就可以checkout代码出来钻研了交流了. (新版界面实现等,请参考 net.oschina.a ...

最新文章

  1. python程序员需要掌握哪些技术-程序员Python编程必备5大工具,你用过几个?
  2. WinDbg 查看静态变量
  3. 前端学习(3103):vue+element今日头条管理-hello-react案例
  4. 利用github page搭建博客
  5. 工信部推动云计算健康快速发展 催生巨大市场机会
  6. three.js(五) 地形纹理混合
  7. CPU,内存, 硬盘,指令之间的关系
  8. ECTOUCH短信接口替换
  9. 如何用甘特图进行项目进度管理
  10. python网络爬虫之如何伪装逃过反爬虫程序的方法
  11. php日期函数实际应用,PHP日期函数的使用介绍
  12. Android开发之那些好用的数据结构与API(二)
  13. 基于深度强化学习的电子商务平台动态定价
  14. Windows的SSH密钥获取
  15. 知识分享:配音员与声优的区别
  16. 一个项目如何编译多个不同签名,包名,资源等
  17. 用人之道:诸葛亮VS曹操
  18. 大动荡中的机遇---------中国经济新变局的展望zz
  19. 高速信号和高频信号的区别
  20. zmqclient的稳定接收(意外断开处理)

热门文章

  1. java-数组排序--冒泡排序、鸡尾酒排序、地精排序
  2. Hessian的使用以及理解(转)
  3. CIO需“野蛮生长” 2017中国CIO高峰论坛7月开幕
  4. 活动目录最佳实践分析器
  5. java.util.concurrent.CyclicBarrier;
  6. 面试遇到基础问题总结
  7. 查看mysql日志文件大小和数据库大小
  8. 提升淘宝排名的27个因素
  9. 利用GetPrivateProfileString读取配置文件(.ini)
  10. Keil逻辑分析仪的使用