一、如何使用ASIHTTPRequest
1、什么时ASIHTTPRequest
ASIHTTPRequest是对CFNetwork API的一个封装,使与web服务器的通信变得简单。它比较适合执行基本的HTTP请求,以及与基于REST(GET/POST/PUT/DELETE)的服务进行交互。其ASIFormDataRequest子类使得使用multipart/form-data提交POST数据和文件更加容易。
功能:
- 一个直接向web服务器提交数据或从web服务器获取数据的接口;
- 将数据下载到内存或直接下载到磁盘上的一个文件中;
- 将本地磁盘上的文件作为POST数据的一部分提交,兼容HTML文件输入机制;
- 便于访问HTTP请求和响应头;
- 进程委托(NSProgressIndicators和UIProgressView)显示关于下载和上传进度信息;
- 对操作队列上传和下载进程标识符的自动管理;
- 支持Basic、Digest和NTLM认证机制,在会话持续时间内自动维持,并可在其后存入Keychain;
- 支持cookie;
- 当app进入后台运行时,请求可以继续执行(iOS 4+);
- 对响应数据和请求体的GZIP支持;
- ASIDownloadCache类可以让请求透明地缓存响应,即使在没有网络可用时也能成功缓存数据请求;
- ASIWebPageRequest-下载完整的webpages,包括诸如图片和样式表等外部资源。任何大小的页面都可以无限期缓存,即使在没有网络可用的情况下也通过UIWebview/WebView查看;
- 对Amazon S3提供支持-无需在签名请求上反复折腾;
- 完全支持Rackspace云文件,这是由Rackspace的Mike Mayo作出的贡献;
- 支持客户端认证;
- 支持手工和自动检测代理、认证代理、PAC文件自动配置:内建的登录会话框可以使iPhone应用程序与认证代理透明交互,无需其他工作;
- 支持带宽管理;
- 支持持久连接;
- 支持同步/异步请求;
- 通过委托或块(Mac OS 10.6, iOS 4及以上)获取关于请求状态的改变通知;
- 大范围单元测试。
2、类说明
(1)主要类
ASIHTTPRequest
处理与web服务器的基本通信,包括下载和上传数据、认证、cookies和进度跟踪。
ASIFormDataRequest
ASIHTTPRequest的一个子类,处理x-www-form-urlencoded和multipart/form-data请求。便于POSTing数据和文件,但如果你希望自己处理POST数据或者根本不需要POST数据,那么就不要将类加到工程中。
ASINetworkQueue
是NSOperationQueue的一个子类,可以跨多个请求跟踪进度。如果你仅需要在某个时刻执行一个请求,或希望单独跟踪每个请求的进度,那么你就不需要使用这个类。
ASIDownloadCache
该类使ASIHTTPRequest透明地缓存来自web服务器的响应。当远程数据因为最后下载而未更新,网络可用时,或者当缓存数据可用时,请求可以配置用于缓存的内容。如果你不希望使用缓存,或者有自己的缓存,就不要包含该类。
(2)支撑类
这些类通常不需要直接使用,其意义次于上述主要类。
ASIInputStream
是ASIHTTPRequest在上传数据时用到的一个助手类。如果使用了ASIHTTPReaquest,那么就要在工程中包含给类。
ASIDataDecompressor
是ASIHTTPRequest在解压数据时用到的一个助手类。如果使用了ASIHTTPReaquest,那么就要在工程中包含给类。
ASIDataCompressor
是ASIHTTPRequest在压缩数据时用到的一个助手类。如果使用了ASIHTTPReaquest,那么就要在工程中包含给类。
ASIAutenticationDialog
该类使ASIHTTPRequest在连接到一个需要认证的服务器以及认证代理时弹出登录对话框,他是所有iPhone OS项目都必须的,Mac OS不包括在内。
Reachability
该类由Andrew Donoho开发,是苹果Reachability类的替代。其功能是在网络连接由WWAN改变为WiFi,或相反时通知ASIHTTPRequest。在iPhone工程中必须包含此类,Mac则不必。你会发现该类对检测网络可用状态非常有用。
(3)协议和配置
必须在你的工程中包含所有下述文件。
ASIHTTPRequestDelegate
该协议指定了ASIHTTPRequest的委托可能实现的方法。所有这些方法都是可选的。
ASIProgressDelegate
该协议列举了uploadProgressDelegate或downloadProgressDelegate可能实现的方法。所有这些方法都是可选的。
ASICacheDelegate
该协议用于指明下载缓存必须实现的方法。如果你希望编写自己的现在缓存,确保它实现了本协议所需要的方法。
ASIHTTPRequestConfig.h
该文件定义了在编译时设置的全局配置选项。使用该文件中的选项来开启各种调试打印到console的选项。不要忘记在应用程序时关闭这些选项。
二、如何在iOS工程中使用ASIHTTPRequest
1、添加文件
复制所需文件到你的工程文件夹,并将它们添加到你的Xcode工程。如果你不确定需要那些文件,最好复制下述所有文件:
- ASIHTTPRequestConfig.h
- ASIHTTPRequestDelegate.h
- ASIProgressDelegate.h
- ASICacheDelegate.h
- ASIHTTPRequest.h
- ASIHTTPRequest.m
- ASIDataCompressor.h
- ASIDataCompressor.m
- ASIDataDecompressor.h
- ASIDataDecompressor.m
- ASIFormDataRequest.h
- ASIInputStream.h
- ASIInputStream.m
- ASIFormDataRequest.m
- ASINetworkQueue.h
- ASINetworkQueue.m
- ASIDownloadCache.h
- ASIDownloadCache.m
- ASIAuthenticationDialog.h
- ASIAuthenticationDialog.m
- Reachability.h (in the External/Reachability folder)
- Reachability.m (in the External/Reachability folder)