支撑Cookie l 当应用(iOS 4+)在后台运维时,ISBN正是书本前边条形码对应的一串数字

1. 达到规定的标准指标

豆类提供对应的api来提供开发人士获取相应的牢笼书籍、电影、小组等新闻。

豆瓣api地址是:http://developers.douban.com/wiki/?title=api\_v2

找到图书项,再找到依照isbn获取图书音讯。可以看出它的API如下

GET
https://api.douban.com/v2/book/isbn/:name

:name到时候要替换来相应的ISBN编码,ISBN便是书本前边条形码对应的一串数字,提供全世界唯一标识。

咱俩把《百年孤独》的ISBN码替换上去

GET
https://api.douban.com/v2/book/isbn/9787544253994

把https后边链接粘贴到浏览器中开辟,你会得到一串json数据
<pre>
{
“alt”:
http://book.douban.com/subject/6082808/“,
“alt_title”: “Cien años de soledad”,
“author”: [
“[哥伦比亚共和国] 加西亚·马尔克斯”
],
“author_intro”: “Garcia•马尔克斯(加百列 García
Márquez)1926年诞生于哥伦比亚共和国马格达莱纳海滨小镇阿拉卡塔卡。童年与曾外祖父母一起生活。一九四零年随家长迁居苏克莱。一九五零年考入波哥伦比亚大学国立大学。1947年因内战辍学,进入报界。五十年份初步发布历史学作品。六十时代初移居墨西哥。一九六七年问世《百年孤独》。1985年获诺Bell理学奖。”,
“binding”: “精装”,
“catalog”: “”,
“id”: “6082808”,
“image”:
http://img3.douban.com/mpic/s6384944.jpg“,
“images”: {
“large”:
http://img3.douban.com/lpic/s6384944.jpg“,
“medium”:
http://img3.douban.com/mpic/s6384944.jpg“,
“small”:
http://img3.douban.com/spic/s6384944.jpg
},
“isbn10”: “7544253996”,
“isbn13”: “9787544253994”,
“origin_title”: “Cien años de soledad”,
“pages”: “360”,
“price”: “39.50元”,
“pubdate”: “2011-6”,
“publisher”: “罗斯海出版公司”,
“rating”: {
“average”: “9.2”,
“max”: 10,
“min”: 0,
“numRaters”: 44029
},
“subtitle”: “”,
“summary”:
“《百年孤独》是魔幻现实主义工学的代表作,描写了布恩迪亚家族七代人的传说传说,以及班达海沿岸小镇马孔多的百年兴衰,反映了拉美1个世纪以来变幻莫测的历史。文章融入神话故事、民间有趣的事、宗教遗闻等潜在因素,巧妙地混合了切实可行与虚幻,呈现出3个瑰丽的想象世界,成为20世纪最器重的经典历史学巨著之一。1983年加西亚•马尔克斯收获诺Bell管工学奖,奠定世界级文学大师的地点,相当的大程度上实属凭借《百年孤独》的宏大影响。”,
“tags”: [
{
“count”: 17805,
“name”: “百年孤独”,
“title”: “百年孤独”
},
{
“count”: 16685,
“name”: “加西亚·马尔克斯”,
“title”: “加西亚·马尔克斯”
},
{
“count”: 8894,
“name”: “拉丁美洲管理学”,
“title”: “拉丁美洲法学”
},
{
“count”: 8256,
“name”: “小说”,
“title”: “小说”
},
{
“count”: 7107,
“name”: “经典”,
“title”: “经典”
},
{
“count”: 6468,
“name”: “海外工学”,
“title”: “国外法学”
},
{
“count”: 2985,
“name”: “文学”,
“title”: “文学”
},
{
“count”: 2518,
“name”: “拉美”,
“title”: “拉美”
}
],
“title”: “百年孤独”,
“translator”: [
“范晔”
],
“url”:
http://api.douban.com/v2/book/6082808
}
</pre>

上边的数额就是我们最终要求取得的。

正文转自:http://my.oschina.net/sunqichao/blog/75011

获取ASIHTTPRequest并集成

那正是说哪些是ASIHTTPRequest?

ASIHTTPRequest正是三个对CFNetwork
API进行了打包,并且选用起来至极简单的一套API

ASIHTTPRequest让http变得更好用了,比较原生的api

您能够在GitHub中找到ASIHTTPRequest的品类地址https://github.com/pokeb/asi-http-request

能够在官网http://allseeing-i.com/ASIHTTPRequest/找到使用办法和文书档案。

这正是说上边来介绍集成过程。

  1. 第②建立1个新的依照single view的工程。
  2. 拷贝所急需的ASIHTTPRequest源代码文件

<pre>
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
<font color=red>iPhone projects must also
include:</font>
ASIAuthenticationDialog.h
ASIAuthenticationDialog.m
Reachability.h (in the External/Reachability folder)
Reachability.m (in the External/Reachability folder)
</pre>
你能够在类型中新建一个group,然后把这一个文件拖过去

  1. 设置非ARC的文件

build phases中的compile source大校全部属于ASIHTTPRequest的文件的compile flags填上-fno-objc-arc

  1. 编写翻译将会透过

ASIHTTPRequest对CFNetwork
API举行了包装,并且使用起来非凡不难,用Objective-C编写,能够很好的选取在Mac
OS
X系统和iOS平台的应用程序中。ASIHTTPRequest适用于中央的HTTP请求,和基于REST的劳动中间的互相。

获取MBProgressHUD并集成

什么是MBProgressHUD?

正是3个总结的进程提醒器,当我们先后在赢得网络数据的时候出现的位移提示器,能够提高用户体验,即便那是全数人都在做的事务

你也得以在GitHub中找到MBProgressHUD的档次地址https://github.com/jdg/MBProgressHUD

集成进度和上边类似,因为MBProgressHUD就三个类MBProgressHUD.h故此越来越简明。
同时因为MBProgressHUD使用AOdysseyC,所以少了地方的第一步。

全副合并好后按cmd + b编写翻译因该没有毛病了。

 

编写制定代码

打开ViewController.m,在viewdidload方法中写如下代码

<pre>NSURL * url = [NSURL
URLWithString:@”https://api.douban.com/v2/book/isbn/9787544253994“];
ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
request.delegate = self;
[request startAsynchronous];
MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view
animated:YES];
hud.labelText = @”加载数据中……”;
</pre>

那将爆发二个http请求,在伸手期间会把各种阶段的业务交由request的delegate处理。
与此同时在发出请求后初叶化三个MBProgressHUD来提示当前先后的运维意况。
选择startAsynchronous方法产生的是异步请求,当然你也足以应用startSynchronous来发出共同请求

requestFinished 是当呼吁达成时调用的方法。具体代码如下

<pre>

  • (void)requestFinished:(ASIHTTPRequest *)request {
    if (request.responseStatusCode == 200) {
    NSError * error;
    // NSLog(@”再次回到数据是:%@”,request.responseString);
    id json = [NSJSONSerialization
    JSONObjectWithData:[request.responseString
    dataUsingEncoding:NSUTF8StringEncoding]
    options:NSJSONReadingAllowFragments error:&error];
    if (json != nil && !error) {
    if ([json isKindOfClass:[NSDictionary class]]) {
    NSLog(@”json is %@\n”, [json objectForKey:@”author_intro”]);
    }
    }
    }
    [MBProgressHUD hideHUDForView:self.view animated:YES];
    }
    </pre>

responseStatusCode是http请求的状态码,200意味请求成功

request.responseString 是http再次回到的数码,是1个字符串。

大家将动用NSJSONSerialization来将回来的字符串格式化为2个NSDictionary或然NSArray,在此地是NSDictionary。

能够看出我们最终输出了作者的信息

2014-05-28 21:22:57.446 t.tt[17154:60b] json is
加西亚•马尔克斯(加百利 García
Márquez)一九二九年降生于哥伦比亚共和国马格达莱纳海滨小镇阿拉卡塔卡。童年与伯公母一起生活。壹玖叁柒年随家长迁居苏克莱。壹玖肆陆年考入波哥伦比亚大学国立大学。壹玖肆陆年因内战辍学,进入报界。五十时代初阶发布文学小说。六十时期初移居墨西哥。1969年出版《百年孤独》。一九八四年获诺Bell农学奖。

最后的[MBProgressHUD hideHUDForView:self.view
animated:YES];将关闭提醒器。

当呼吁出现破产的气象我们也要做相应的拍卖,代码如下

<pre>

  • (void)requestFailed:(ASIHTTPRequest *)request {
    // [MBProgressHUD hideHUDForView:self.view animated:YES];
    }
    </pre>

同一需要关闭提醒器。

</br>
到此地全部收尾。

ASIHTTPRequest作用很强劲,主要特点如下:

l 通过简单的接口,即可到位向服务端提交数据和从服务端获取数据的办事 l
下载的多寡,可存款和储蓄到内部存款和储蓄器中或直接存款和储蓄到磁盘中 l 能上传本和姑件到服务端 l
能够一本万利的访问和操作请求和重临的Http头音信 l
能够拿走到上传或下载的快慢音讯,为应用程序提供更好的心得 l
协理上传或下载队列,并且可收获队列的速度消息 l
帮衬核心、摘要和NTLM身份验证,在同一会话中授权凭证会自动维持,并且能够储存在Keychain(Mac和iOS操作系统的密码管理种类)中 l
支持Cookie l 当应用(iOS 4+)在后台运营时,请求能够持续运维 l
帮助GZIP压缩数量 l
内置的ASIDownloadCache类,能够缓存请求再次来到的多少,这样尽管没有网络也得以回来已经缓存的多寡结果 l
ASIWebPageRequest
–能够下载完整的网页,包涵富含的网页、样式表、脚本等资源文件,并呈未来UIWebView
/WebView中。任意大小的页面都足以无限期缓存,那样尽管没有网络也能够离线浏览 l
帮忙客户端证书 l 援助通过代办发起Http请求 l
帮衬带宽限制。在iOS平台,能够依据如今网络状态来自动决定是还是不是限制带宽,例如当使用WWAN(GPTucsonS/艾德ge/3G)网络时界定,而当使用WIFI时不做任何限制 l
协助断点续传 l 协助同步和异步请求

 

 

1) 添加文书

 

往二个Xcode项目中添加第1方类库文件,有三种艺术:

1.
首先种方法,在Finder中打开必要丰富到文件或文件夹,在Xcode中开辟要充裕文件的门类,然后选中要丰富的公文或文件夹,将它从Finder中拖到Xcode中,然后释放。在弹出的对话框中,若是文件已经拷贝到了连串文件目录中,则不需求选中“Copy
items”的复选框;如果文件没有拷贝到项目文件目录,就必要选中“Copy
items”的复选框,那样Xcode会自动把文件复制到项目文件目录下。如下图所示:
图片 1
图片 2

  1. 第三种方法,在Xcode中,在要丰裕文件的分组下点右键,选中“Add Files to
    “My
    Project”…”菜单,在弹出的文本浏览会话框中选中要添加到文件或文件夹。假如要添加文件已经拷贝到了花色文件目录中,则不需求选中“Copy
    items”的复选框;如果文件没有拷贝到项目文件目录,就需求选中“Copy
    items”的复选框,那样Xcode会自动把公文复制到项目文件目录下。如下图所示:
    图片 3
    图片 4

依照地点的证实,添加ASIHTTPRequest相关文件到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 (在源码的 External/Reachability 目录下)

Reachability.m (在源码的 External/Reachability 目录下)

2) 链接相关类库

  1. 当选项目

  2. 入选目的

  3. 跳转到“Build Phases”标签

  4. 展开“Link Binary With Libraries”分组

  5. 点击“+”添加类库

如下图所示:

图片 5

  1. 从列表中精选CFNetwork.framework,然后点击“Add”按钮。

图片 6

  1. 根据上一步相同的法门添加:SystemConfiguration.framework,
    MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib那几个类库。

  2. 添加完后,能够将添加好的一起类库拖到Xcode项目标Frameworks目录下
    图片 7

 

在动用ASIHTTPRequest在此之前,请确认已经正确安装,然后在急需运用它的代码文件底部,参预:

#import “ASIHTTPRequest.h”

这么就足以在代码中运用ASIHTTPRequest相关的类。

倡导七个联袂请求

同步意为着线程阻塞,在主线程中采用此方式会使利用Hang住而不响应任何用户事件。所以,在应用程序设计时,大多被用在专门的子线程扩张用户体验,或用异步请求代替(上边会讲到)。

– (IBAction)grabURL:(id)sender

{

  NSURL *url = [NSURL
URLWithString:@” http://allseeing-i.com”];

  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

  [request startSynchronous];

  NSError *error = [request error];

  if(!error) {

    NSString *response = [request responseString];

  }

}

a, 用requestWithU汉兰达L连忙方法得到ASIHTTPRequest的一个实例
b, startSynchronous 方法运行同步访问,
c,
由于是同步请求,没有基于事件的回调方法,所以从request的error属性获取错误音讯。
d, responseString,为呼吁的回到NSString音讯。

始建贰个异步请求

异步请求的裨益是不打断当前线程,但针锋绝对于联合请求略为复杂性,至少要添加四个回调方法来博取异步事件。
下边异步请求代码完毕地点一样的一件工作:

– (IBAction)grabURLInBackground:(id)sender

{

   NSURL *url = [NSURL
URLWithString:@” http://allseeing-i.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];

}

a,与地方区别的地点是点名了一个”delegate”,并用startAsynchronous来运转网络请求。
b,在那里达成了多个delegate的方式,当数码请求成功时会调用requestFinished,请求失利时(如互连网难点或服务器内部错误)会调用requestFailed。

队列请求

提供了八个对异步请求特别精准丰盛的控制。
如,能够设置在队列中,同步请求的连接数。往队列里增长的呼吁实例数超过maxConcurrentOperationCount时,请求实例将被置为等待,直到前边至少有二个伸手实现并出列才被平放队列里举办。
也适用于当大家有多少个请求必要按梯次执行的时候(可能是工作上的须要,也也许是软件上的调优),仅仅需求把maxConcurrentOperationCount设为“1”。

– (IBAction)grabURLInTheBackground:(id)sender

{

   if(![self queue]) {

      [self setQueue:[[[NSOperationQueue alloc] init]
autorelease]];

   }

 

   NSURL *url = [NSURL
URLWithString:@” http://allseeing-i.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];

}

始建NSOperationQueue,那一个Cocoa框架结构的实践任务(NSOperation)的任务队列。大家经过ASIHTTPRequest.h的源码能够见到,此类自己正是1个NSOperation的子类。也正是说它能够平昔被置于”职分队列”中,并被实施。上面包车型大巴代码队了队列的始建与丰盛操作外,其它代码与上一例一样。

伸手队列上下文

a,能够安装三个上下文(userInfo)到request对象中,当呼吁响应完后能够通过拜访request对象的userInfo获取里面包车型大巴音讯
b,为每3个伸手实例设置差异的setDidFinishSelector /
setDidFailSelector的回调方法
c,子类化ASIHTTPRequest,重写requestFinished: 与 failWithProblem:方法

ASINetworkQueues, 它的delegate提供更为丰盛的功力

提供的更加多的回调方法如下:
a,requestDidStartSelector,请求发起时会调此方法,你能够在此办法中跟据业务采用性的安装request对象的deleaget。
b,requestDidReceiveResponseHeadersSelector,当接受完响应的Header后统一筹划此格局,这么些对下载大数据的时候一定有用,你能够在措施里做更多事情上的处理。
c,requestDidFinishSelector,请求并响应成功完成时调用此办法
d,requestDidFailSelector,请求退步
e,queueDidFinishSelector,整个队列里的有着请求都终止时调用此措施。

图片 8它是NSOperationQueues的扩展,小而有力。但也与它的父类略有差距。如,仅添加到队列中其实并不能够实施请求,唯有调用[
queue g o]才会执行;2个正在周转中的队列,并不须要重复调用[ queue go
]。

暗中认可情形下,队列中的一个呼吁若是战败,它会收回全部未形成的央浼。能够安装[
queue setShouldCancelAllRequestsOnFailure:NO ]来修 正。

裁撤异步请求

首先,同步请求是无法撤废的。
说不上,不管是队列请求,照旧简单的异步请求,全体调用[ request cancel
]来废除请求。

图片 9撤回的伸手暗中认可都会按请求退步处理,并调用请求失败delegate。 
假使不想调用delegate方法,则设置:[ request clearDelegatesAndCancel];

队列请求中必要注意的是,假使您撤除了三个请求,队列会活动撤废此外具有请求。
一经只想收回叁个呼吁,能够安装队列:[ queue
setShouldCancelAllRequestsOnFailure:NO ];
倘若想领会撤废全数请求:[ queue cancelAllOperations ];

安全的内部存款和储蓄器回收提议

request并不曾retain你的delegate,所以在未曾请求完的时候释放了此delegate,须求在dealloc方法里先裁撤全数请求,再自由请求实例,如:

– (void)dealloc

{

   [request clearDelegatesAndCancel];

   [request release];

   …

   [superdealloc];

}

向服务器端上传数据

ASIFormDataRequest ,模拟 Form表单提交,其交由格式与
Header会自动识别。
不曾公文:application/x-www-form-urlencoded
有文件:multipart/form-data

ASIFormDataRequest *request = [ASIFormDataRequest
requestWithURL:url];

[request setPostValue:@”Ben”forKey:@”first_name”];

[request setPostValue:@”Copsey”forKey:@”last_name”];

[request setFile:@”/Users/ben/Desktop/ben.jpg”forKey:@”photo”];

[request addData:imageData
withFileName:@”george.jpg”andContentType:@”image/jpeg”forKey:@”photos”];

要是要发送自定义数据:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request appendPostData:[@”This is my
data”dataUsingEncoding:NSUTF8StringEncoding]];

// Default becomes POST when you use appendPostData: /
appendPostDataFromFile: / setPostBody:

[request setRequestMethod:@”PUT”];

下载文件

透过安装request的setDownloadDestinationPath,能够设置下载文件用的下载指标目录。
第①,下载进度文件会保留在temporaryFileDownloadPath目录下。假若下载达成会做以下工作:
1,如若数据是缩短的,进行解压,并把文件放在downloadDestinationPath目录中,权且文件被剔除
2,假设下载失利,一时文件被直接移到downloadDestination帕特h目录,并替换同名文件。

借使你想博得下载中的全部数据,能够兑现delegate中的request:didReceiveData:方法。但如果你实现了这几个方法,request在下载完后,request并不把公文放在downloadDestinationPath中,须要手工处理。

获取响应消息

信息:status , header, responseEncoding

[request responseStatusCode];

[[request responseHeaders] objectForKey:@”X-Powered-By”];

 [request responseEncoding];

取得请求进程

有五个回调方法能够获得请求进度,
1,downloadProgressDelegate,能够获取下载进程
2,uploadProgressDelegate,能够取得上传进程

cookie的支持

要是Cookie存在的话,会把那一个消息放在NSHTTPCookieStorage容器中国共产党享,并供下次接纳。
你能够用[ ASIHTTPRequest setSessionCookies:nil ] ; 清空全体Cookies。
理所当然,你也得以打消私下认可的Cookie策略,而使自定义的Cookie:

//Create a cookie

NSDictionary *properties = [[[NSMutableDictionary alloc] init]
autorelease];

[properties setValue:[@”Test Value” encodedCookieValue]
forKey:NSHTTPCookieValue];

[properties
setValue:@”ASIHTTPRequestTestCookie”forKey:NSHTTPCookieName];

[properties setValue:@”.allseeing-i.com”forKey:NSHTTPCookieDomain];

[properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60]
forKey:NSHTTPCookieExpires];

[properties
setValue:@”/asi-http-request/tests”forKey:NSHTTPCookiePath];

NSHTTPCookie *cookie = [[[NSHTTPCookie alloc]
initWithProperties:properties] autorelease];

 

//This url will return the value of the ‘ASIHTTPRequestTestCookie’
cookie

url = [NSURL
URLWithString:@” http://allseeing-i.com/ASIHTTPRequest/tests/read\_cookie”];

request = [ASIHTTPRequest requestWithURL:url];

[request setUseCookiePersistence:NO];

[request setRequestCookies:[NSMutableArray arrayWithObject:cookie]];

[request startSynchronous];

 

//Should be: I have ‘Test Value’ as the value of
‘ASIHTTPRequestTestCookie’

NSLog(@”%@”,[request responseString]);

大文件断点续传

0.94现在帮助大文件的断点下载,只要求设置:
[ request setAllowResumeForFileDownloads:YES ];
[ request setDownloadDestinationPath:downloadPath ];
就足以了。

ASIHTTPRequest会自动保存访问过的URL消息,并备之后用。在偏下多少个情景十三分有效:
1,当没有网络连接的时候。
2,已下载的数量再度恳请时,仅当它与本地版本不样时才开始展览下载。

ASIDownloadCache 设置下载缓存

它对Get请求的响应数据举行缓存(被缓存的数目必需是打响的200呼吁):

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];

当设置缓存策略后,全部的恳求都被机关的缓存起来。
除此以外,尽管单独希望某次请求使用缓存操作,也能够这么使用:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDownloadCache:[ASIDownloadCache sharedCache]];

多样的缓存并存

唯有须求创设差异的ASIDownloadCache,并安装缓存所运用的路线,并设置到需求采纳的request实例中:

ASIDownloadCache *cache = [[[ASIDownloadCache alloc] init]
autorelease];

[cache setStoragePath:@”/Users/ben/Documents/Cached-Downloads”];

[self setMyCache:cache];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDownloadCache:[self myCache]];

缓存策略

缓存策略是我们决定缓存行为的基本点格局,如:哪天进行缓存,缓存数据的运用格局。
以下是政策可选列表(可结合使用):

ASIUseDefaultCachePolicy那是一个暗中认可的缓存策略“ASIAskServerIfModifiedWhenStaleCachePolicy”,这些很精通,见名知意(它不能够与任何策略组合使用)ASIDoNotReadFromCacheCachePolicy所读数据不行使缓存ASIDoNotWriteToCacheCachePolicy不对缓存数据举办写操作ASIAskServerIfModifiedWhenStaleCachePolicy暗许缓存行为,request会先判断是或不是留存缓存数据。a,
假如没有再展开互联网请求。
b,假如存在缓存数据,并且数据尚未过期,则选拔缓存。c,如若存在缓存数据,但已经晚点,request会先实行互联网请求,判断服务器版本与本土版本是不是一律,若是一致,则利用缓存。尽管服务器有新本子,会实行网络请求,并更新本地缓存ASIAskServerIfModifiedCachePolicy与暗许缓存大概相同,差异仅是每一遍请求都会
去服务器判断是不是有立异ASIOnlyLoadIfNotCachedCachePolicy假使有缓存在地头,不管其逾期与否,总会拿来使用ASIDontLoadCachePolicy仅当有缓存的时候才会被科学实施,如果没有缓存,request将被撤除(没有错误音讯)ASIFallbackToCacheIfLoadFailsCachePolicy那些选项平常被用来与别的选项组合使用。请求失败时,倘使有缓存当网络则赶回本地缓存音讯(这一个在处理分外时万分管用)

图片 10要是设置了“defaultCachePolicy”则怀有的请求都会利用此缓存。

缓存存款和储蓄格局

您能够设置缓存的多少须要保留多久,ASIHTTPRequest提供了三种政策:
a,ASICacheForSessionDurationCacheStoragePolicy,暗许策略,基于session的缓存数据存款和储蓄。当下次运行或[ASIHTTPRequest
clearSession]时,缓存将失效。
b,ASICachePermanentlyCacheStoragePolicy,把缓存数据永久保存在地头,
如:

ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL:url ];

[ request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy
];

除此以外,也能够使用clearCachedResponsesForStoragePolicy来清空钦定策略下的缓存数据。

缓存别的特性

安装是还是不是按服务器在Header里钦点的是否可被缓存或超时策略进行缓存:

[[ ASIDownloadCache sharedCache ]
setShouldRespectCacheControlHeaders:NO ];

设置request缓存的实用时间:

[ request setSecondsToCache:60*60*24*30];// 缓存30天

能够判断数据是或不是从缓存读取:

[ request didUseCachedResponse ];

设置缓存所使用的途径:

[ request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache
] pathToStoreCachedResponseDataForRequest:request ]];

落实自定义的缓存

设若不难的落到实处ASICacheDelegate接口就足以被用来使用。

采取代理请求

暗许的情况下,ASIHTTPRequest会使用被设置的暗中同意代理。但你也得以手动修改http代理:

// Configure a proxy server manually

NSURL *url = [ NSURL
URLWithString:@” http://allseeing-i.com/ignore”];

ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL:url ];

[ request setProxyHost:@”192.168.0.1″];

[ request setProxyPort:3128];

 

// Alternatively, you can use a manually-specified Proxy Auto Config
file (PAC)

// (It’s probably best if you use a local file)

[request setPACurl:[NSURL
URLWithString:@”file:///Users/ben/Desktop/test.pac”]];

ASIHTTPRequest, 请求的任何天性

iOS4中,当使用后台运营时依旧请求数据:

[ request setShouldContinueWhenAppEntersBackground:YES ];

是否有网络请求:

[ ASIHTTPRequest isNetworkInUse ]

是还是不是出示互联网请求新闻在status bar上:

[ ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO ];

安装请求超时时,设置重试的次数:

[ request setNumberOfTimesToRetryOnTimeout:2];

KeepAlive的支持:

// Set the amount of time to hang on to a persistent connection before
it should expire to 2 minutes

[ request setPersistentConnectionTimeoutSeconds:120];

 

// Disable persistent connections entirely

[ request setShouldAttemptPersistentConnection:NO ];

 

相关文章