开源中国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操作    系统的密码管理系统)中 

支持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"


请求得到数据:



//同步请求 - (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://blog.csdn.net/duxinfeng2010



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




相关文章
|
9月前
|
缓存 iOS开发
IOS网络编程:使用 URLSession 实现网络请求的步骤是什么?
IOS网络编程:使用 URLSession 实现网络请求的步骤是什么?
138 1
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
211 0
|
6月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
142 56
|
6月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
6月前
|
运维 网络安全 iOS开发
厉害!外国网络工程师用Ansible给思科IOS设备升级!
厉害!外国网络工程师用Ansible给思科IOS设备升级!
|
7月前
|
前端开发 开发工具 Swift
学习iOS开发的准备
准备学习iOS开发?确保有Mac和最新Xcode,先学好编程基础特别是Swift。利用Apple官方文档、在线课程和书籍作为资源。熟悉Xcode及Git,通过实践项目和开源代码积累经验。深研架构模式、核心框架和优化技巧。加入开发者社区,关注行业动态,持续学习。
68 1
|
9月前
|
移动开发 网络协议 安全
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
241 0
|
9月前
|
移动开发 iOS开发 Perl
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
130 0
|
9月前
|
XML JSON API
IOS网络编程:介绍一下 Alamofire 库。
IOS网络编程:介绍一下 Alamofire 库。
208 3

热门文章

最新文章

  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 3
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    27
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 5
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 6
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    232
  • 7
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    88
  • 8
    深入探索iOS开发中的SwiftUI框架
    143
  • 9
    ios样式开关按钮jQuery插件
    58
  • 10
    Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
    75