ASIHTTPRequest详解
2013-04-01 17:33
465 查看
第三方苹果开发库之ASIHTTPRequest
ASIHttpRequest库简介、配置和安装ASIHttpRequest-创建和执行requestASIHttpRequest-发送数据ASIHTTPRequest-下载数据ASIHTTPRequest-进度追踪ASIHTTPRequest-身份验证ASIHTTPRequest-HTTP授权-流程图ASIHTTPRequest-Cookie的使用ASIHTTPRequest-数据压缩ASIHTTPRequest-断点续传(下载)ASIHTTPRequest-直接读取磁盘数据流的请求体ASIHTTPRequest-使用download cacheASIHTTPRequest-流量控制ASIHTTPRequest-客户端证书支持ASIHTTPRequest-使用代理连接ASIHTTPRequest-其他特性ASIHTTPRequest-Debug选项相关网络资料:升级到iOS5后ASIHttpRequest库问题及解决方法 解决iOS5网络代理弹出框问题(备用地址:http://www.cocoachina.com/iphonedev/sdk/2011/1021/3403.html)ASIHttpRequest库简介、配置和安装
发布者: Seven's - 2011/10/12 - 分类:ASIHTTPRequest中文文档 使用ASIHTTPRequest可以很方便的进行一下操作:同步/异步方式下载数据定义下载队列,让队列中的任务按指定的并发数来下载(队列下载必须是异步的)提交表单,文件上传处理cookie设置代理上下载进度条重定向处理请求与响应的GZIP验证与授权等等,只要跟HTTP有关,只有你想不到的,没有她做不到的~配置方法:ASIHTTPRequestConfig.hASIHTTPRequestDelegate.hASIProgressDelegate.hASICacheDelegate.hASIHTTPRequest.hASIHTTPRequest.mASIDataCompressor.hASIDataCompressor.mASIDataDecompressor.hASIDataDecompressor.mASIFormDataRequest.hASIInputStream.hASIInputStream.mASIFormDataRequest.mASINetworkQueue.hASINetworkQueue.mASIDownloadCache.hASIDownloadCache.miPhone 工程还需要:ASIAuthenticationDialog.hASIAuthenticationDialog.mReachability.h (在External/Reachability 目录下)Reachability.m (在 External/Reachability 目录下)库引用:CFNetwork.frameworkSystemConfiguration.frameworkMobileCoreServices.frameworkCoreGraphics.framework和libz.dylib另外,还需要libxml2.dylib(libxml2还需要设置连接选项-lxml2 和头文件搜索路径/usr/include/libxml2)ASIHttpRequest-创建和执行request
发布者: Seven's - 2011/10/12 - 分类:ASIHTTPRequest中文文档 同步请求同步请求会在当前线程中执行,使用error属性来检查结束状态(要下载大文件,则需要设定downloadDestinationPath来保存文件到本地):; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; } }同步请求会阻塞主线程的执行,这导致用户界面不响应用户操作,任何动画都会停止渲染。
异步请求
下面是最简单的异步请求方法,这个request会在全局的NSOperationQueue中执行,若要进行更复杂的操作,我们需要自己创建NSOperationQueue或者ASINetworkQueue,后面会讲到。- (IBAction)grabURLInBackground:(id)sender { NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; [request startAsynchronous]; } - (void)requestFinished:(ASIHTTPRequest *)request { // Use when fetching text data NSString *responseString = [request responseString]; // Use when fetching binary data NSData *responseData = [request responseData]; } - (void)requestFailed:(ASIHTTPRequest *)request { NSError *error = [request error]; }
使用block
在平台支持情况下,ASIHTTPRequest1.8以上支持block。[code]- (IBAction)grabURLInBackground:(id)sender{NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];[request setCompletionBlock:^{// Use when fetching text dataNSString *responseString = [request responseString];// Use when fetching binary dataNSData *responseData = [request responseData];}];[request setFailedBlock:^{NSError *error = [request error];}];[request startAsynchronous];}注意,声明request时要使用__block修饰符,这是为了告诉block不要retain request,以免出现retain循环,因为request是会retain block的。使用队列
创建NSOperationQueue或者ASINetworkQueue队列,我们还可以设定最大并发连接数:maxConcurrentOperationCount- (IBAction)grabURLInTheBackground:(id)sender { i 4000 f (![self queue]) { [self setQueue:[[[NSOperationQueue alloc] init] autorelease]]; [self queue].maxConcurrentOperationCount = 4; } NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; [request setDidFinishSelector:@selector(requestDone:)]; [request setDidFailSelector:@selector(requestWentWrong:)]; [[self queue] addOperation:request]; //queue is an NSOperationQueue } - (void)requestDone:(ASIHTTPRequest *)request { NSString *response = [request responseString]; } - (void)requestWentWrong:(ASIHTTPRequest *)request { NSError *error = [request error]; }如果不设定selector,那么系统会使用默认的requestFinished: 和 requestFailed:方法如果需要对队列里面的每个request进行区分,那么可以设定request的userInfo属性,它是个NSDictionary,或者更简单的方法是设定每个request的tag属性,这两个属性都不会被发送到服务器。不要使用request的URL来区分每个request,因为URL可能会改变(例如重定向),如果需要使用request的URL,使用[request originalURL],这个将永远返回第一个url。
对于ASINetworkQueue
ASINetworkQueue是NSOperationQueue的子类,提供更高级的特性(ASINetworkQueue的代理函数):requestDidStartSelector当一个request开始执行时,这个代理函数会被调用。requestDidReceiveResponseHeadersSelector当队列中的request收到服务器返回的头信息时,这个代理函数会被调用。对于下载很大的文件,这个通常比整个request的完成要早。requestDidFinishSelector当每个request完成时,这个代理函数会被调用。requestDidFailSelector当每个request失败时,这个代理函数会被调用。queueDidFinishSelector当队列完成(无论request失败还是成功)时,这个代理函数会被调用。ASINetworkQueues与NSOperationQueues稍有不同,加入队列的request不会立即开始执行。如果队列打开了进度开关,那么队列开始时,会先对所有GET型request进行一次HEAD请求,获得总下载大小,然后真正的request才被执行。向一个已经开始进行的ASINetworkQueue 加入request会怎样?如果你使用ASINetworkQueue来跟踪若干request的进度,只有当新的request开始执行时,总进度才会进行自适应调整(向后移动)。ASINetworkQueue不会为队列开始后才加入的request进行HEAD请求,所以如果你一次向一个正在执行的队列加入很多request,那么总进度不会立即被更新。如果队列已经开始了,不需要再次调用[queue go]。当ASINetworkQueue中的一个request失败时,默认情况下,ASINetworkQueue会取消所有其他的request。要禁用这个特性,设置 [queue setShouldCancelAllRequestsOnFailure:NO]。ASINetworkQueues只可以执行ASIHTTPRequest操作,二不可以用于通用操作。试图加入一个不是ASIHTTPRequest的NSOperation将会导致抛出错误。取消异步请求
取消一个异步请求(无论request是由[request startAsynchronous]开始的还是从你创建的队列中开始的),使用[request cancel]即可。注意同步请求不可以被取消。注意,如果你取消了一个request,那么这个request将会被视为请求失败,并且request的代理或者队列的代理的失败代理函数将被调用。如果你不想让代理函数被调用,那么将delegate设置为nil,或者使用clearDelegatesAndCancel方法来取消request。clearDelegatesAndCancel 将会首先清除所有的代理和block。当使用ASINetworkQueue时,如果取消了队列中的一个request,那么队列中其他所有request都会被取消,可以设置shouldCancelAllRequestsOnFailure的值为NO来避免这个现象。安全地控制delegate防止request完成之前代理被释放
request并不retain它们的代理,所以有可能你已经释放了代理,而之后request完成了,这将会引起崩溃。大多数情况下,如果你的代理即将被释放,你一定也希望取消所有request,因为你已经不再关心它们的返回情况了。如此做:// 代理类的
ASIHTTPRequest-Cookie的使用
持久化cookie
ASIHTTPRequest允许你使用全局存储来和所有使用CFNetwork或者NSURLRequest接口的程序共享cookie。如果设置useCookiePersistence为YES(默认值),cookie会被存储在共享的 NSHTTPCookieStorage 容器中,并且会自动被其他request重用。值得一提的是,ASIHTTPRequest会向服务器发送其他程序创建的cookie(如果这些cookie对特定request有效的话)。你可以清空session期间创建的所有cookie:ASIHTTPRequest-直接读取磁盘数据流的请求体
从0.96版本开始,ASIHTTPRequest可以使用磁盘上的数据来作为请求体。这意味着不需要将文件完全读入内存中,这就避免的当使用大文件时的严重内存消耗。使用这个特性的方法有好几种:ASIFormDataRequests
有时服务器要求提供客户端证书,从1.8版本开始,你可以随request发送证书。
相关文章推荐
- ASIHTTPRequest 详解
- ASIHTTPRequest 详解
- ASIHTTPRequest-详解
- IOS ASIHttpRequest使用详解
- ASIHTTPRequest详解 【经典】(三)
- ASIHttpRequest详解
- ASIHttpRequest使用详解
- ASIHTTPRequest 详解,
- ASIHTTPRequest详解 非常强大
- ASIHTTPREQUEST详解
- iOS ASIHTTPRequest详解
- iOS ASIHTTPRequest详解
- ASIHTTPRequest 详解, http 请求终结者
- iphone 开发之 第三方 network框架 ASIHTTPRequest 详解
- iOS疯狂详解之ASIHTTPRequest
- iOS ASIHTTPRequest详解
- ASIHttpRequest 详解[转载]
- 转:ASIHTTPRequest详解
- ASIHTTPRequest 详解
- iOS杂谈18—ASIHTTPRequest 中文详解