详解iOS - ASIHTTPRequest 网络请求

2020-01-18 19:15:25于丽

前言

使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 API,外号 “HTTP终结者”,用 Objective-C 编写,运行效率很高,可以很好的应用在 Mac OS X 系统和 iOS 平台的应用程序中,ASIHTTPRequest 适用于基本的 HTTP 请求,和基于 REST 的服务之间的交互。可惜作者早已停止更新,有一些潜在的 BUG 无人去解决,很多公司的旧项目里面都残留着它的身影,以前的很多 iOS 项目都是 ASI + SBJson,会不会用 ASI,可以算是检验是否为老牌 iOS 程序员的标准之一。从 iOS 9 开始 CFNetwork 相关的类和方法开始被废弃,可以使用 AFNetworking 替换 ASIHTTPRequest 的使用。在 iOS 9+ 中使用 ASIHTTPRequest 无需对 App Transport Security Settings 添加设置。

1、ASIHTTPRequest

1.1 ASI 主要特色

通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作。 下载的数据,可存储到内存中或直接存储到磁盘中。 能上传本地文件到服务端。 可以方便的访问和操作请求和返回的 Http 头信息。 可以获取到上传或下载的进度信息,为应用程序提供更好的体验。 支持上传或下载队列,并且可获取队列的进度信息。 支持基本、摘要和 NTLM 身份认证,在同一会话中授权凭证会自动维持,并且可以存储在 Keychain(Mac 和 iOS 操作系统的密码管理系统)中。 支持 Cookie。 当应用(iOS 4+)在后台运行时,请求可以继续运行。 支持 GZIP 压缩数据。 内置的 ASIDownloadCache 类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果。 ASIWebPageRequest 可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在 UIWebView /WebView 中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览。 支持客户端证书。 支持通过代理发起 Http 请求。 支持带宽限制。在 iOS 平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用 WWAN(GPRS/Edge/3G) 网络时限制,而当使用 WIFI 时不做任何限制。 支持断点续传。 支持同步和异步请求。

1.2 AFN 与 ASI 的区别

1、底层实现

1)AFN 的底层实现基于 OC 的 NSURLConnection 和 NSURLSession

2)ASI 的底层实现基于纯 C 语言的 CFNetwork 框架

3)因为 NSURLConnection 和 NSURLSession 是在 CFNetwork 之上的一层封装,因此 ASI 的运行性能高于 AFN

2、对服务器返回的数据处理

1)ASI 没有直接提供对服务器数据处理的方式,直接返回的是 NSData/NSString

2)AFN 提供了多种对服务器数据处理的方式 (1) JSON 处理-直接返回 NSDictionary 或者 NSArray