您的位置:首页 > 理论基础 > 计算机网络

ASIHttpRequest网络使用框架

2013-11-01 10:05 435 查看
/********开源库ASI的使用********/
/*依赖的5个库文件: CFNetwork, SystemConfiguration, MobileCoreServices, 和 libz、libxml2
*ASIHttpRequest 是一款极其强劲的 HTTP 访问开源项目。让简单的 API 完成复 杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文 件,HTTP 认证。 在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们 的代码加轻简灵活。*/
// ·官方网址: http://allseeing-i.com/ASIHTTPRequest/How-to-use // ·下载地址: https://github.com/pokeb/asi-http-request 
/********发起同步请求********/
- (void)synchronousRequest {
if ([self.urlField.text length] == 0) {
return; }
// 初始化一个url
NSURL *url = [NSURL URLWithString:self.urlField.text];
// 创建request对象
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
// 设置请求方式
[request setRequestMethod:@"POST"];
// 发送一个同步请求
[request startSynchronous];
NSError *error = [request error];
if (!error) {
// 获取请求数据
NSString *response = [request responseString]; self.textField.text = response;
}
}

/********发起异步请求********/
- (void)aSynchronousRequest {
if ([self.urlField.text length] == 0) {
return; }
  NSURL *url = [NSURL URLWithString:self.urlField.text];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self];
//  发送异步请求
[request startAsynchronous];
}
//  数据加载结束delegate
- (void)requestFinished:(ASIHTTPRequest *)request {
NSString *responseString = [request responseString];
self.textField.text = responseString;
}
//  数据加载失败delegate
- (void)requestFailed:(ASIHTTPRequest *)request {
NSError *error = [request error];
}
/********Block回调********/
//  设置开始请求回调
- (void)setStartedBlock:(ASIBasicBlock)aStartedBlock;

//  设置请求完成回调
- (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock;

//  设置请求失败回调
- (void)setFailedBlock:(ASIBasicBlock)aFailedBlock;

//  设置数据接受回调,调用多次,每次返回加载的数据
- (void)setDataReceivedBlock:(ASIDataBlock)aReceivedBlock;

//Block回调示例
//  异步请求
- (void)aSynchronousRequest {
//  如果url不存在,不执行
if ([self.urlField.text length] == 0) {
return;
}

NSURL *url = [NSURL URLWithString:self.urlField.text];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

//  设置数据请求完成后回调的block
[request setCompletionBlock:^{
NSString *responseText = [request responseString];
NSLog(@"%@",responseText);
}];

//  发送异步请求
[request startAsynchronous];
}

/********设置缓存策略********/
/*
* 缓存策略说明
* ASICacheForSessionDurationCacheStoragePolicy 清除上次会话请求的本地缓存数据
* ASICachePermanentlyCacheStoragePolicy 是持久缓存,程序瑕疵启动,缓存仍人存在
*/
//  创建缓存对象
ASIDownloadCache *asiCache = [[ASIDownloadCache alloc] init];

//  设置缓存目录,这里设置沙河目录下得Documents目录作为缓存目录
NSString *document = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
[asiCache setStoragePath:document];

//  设置缓存策略
[asiCache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];

//  创建数据请求对象
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: [NSURL  URLWithString:urlString]];

//  设置缓存策略
request.cacheStoragePolicy = ASICachePermanentlyCacheStoragePolicy;

//  ?????????
[request setDownloadCache:cache];

//  开始异步请求网络
[request startAsynchronous];

//  网络数据加载完毕后调用block
[request setCompletionBlock:^{
//  打印返回的数据
NSString *responseString = request.responseString;
NSLog(@"%@", responseString);
//  判断返回的数据是否来自本地缓存
if (request.didUseCachedResponse) {
NSLog(@"使用缓存数据");
} else {
NSLog(@"请求网络数据");
}
}];

/********文件下载*********/
//  设置本地路径path
NSString *urlstring = @”http://free2.macx.cn:81/tools/system/CleanMyMac-
v1-10-8.dmg”;
NSString *filename = [urlstring lastPathComponent];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:
[NSString stringWithFormat:@"Documents/%@",filename]];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:
[NSURL URLWithString:urlstring]];
//  设置下载路径
[request setDownloadDestinationPath:path];
//  设置下载进度条视图
//  监听下载进度条需要用到kvo
[request setDownloadProgressDelegate:self.myProgress];
//  开始异步下载
[request startAsynchronous];

/********请求队列********/
//·ASIHTTPRequest 类是继承于NSOperation, 所以它本身是可以添加到请求队列 中NSOperationQueue。
//·ASI为我们提供了请求队列对象ASINetworkQueue,它继承于NSOperationQueue
//  创建请求队列
ASINetworkQueue *queue = [ASINetworkQueue queue];
//  设置并发数
[queue setMaxConcurrentOperationCount:1];
//  将请求添加到队列中
[queue addOperation:request1];
[queue addOperation:request2];
//  执行队列中的请求
[queue go];

/********取消异步请求********/
//  请求取消后,默认按请求失败处理,调用失败的delegate
[request cancel];
//  如果不想调用失败后的delegate,则设置
[request clearDelegatesAndCancel];

//  获取下载请求进度delegate
downloadProgressDelegate
//  获取上传请求进度delegate
uploadProgressDelegate

/********其他特性********/
//  ios4以上,是否开启后台运行
[request setShouldContinueWhenAppEntersBackground:YES];
//  设置超时自动重试最大次数为2
[request setNumberOfTimesToRetryOnTimeout:2];
//  获取cookies
NSMutableArray *cookies = [request requestCookies];
//  清除cookies
[ASIHTTPRequest clearSession];
//  设置cookies
[ASIHTTPRequest setSessionCookies:cookies];
//  当前网络是否可用
[ASIHTTPRequest isNetworkInUse];
//  当前网络是否为3G/2G
[ASIHTTPRequest isNetworkReachableViaWWAN];
//  网络请求时,关闭状态栏上显示的loading
[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO];

/********监听网络-NSNotificationCenter********/
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];

Reachability *internetReach = [[Reachability reachabilityForInternetConnection]];

[internetReach startNotifier];

NetworkStatus netStatus = [internetReach currentReachabilityStatus];

if (netStatus) {
//  NSLog(@"网络通");
}
- (void)reachabilityChanged: (NSNotification* )note {
NetworkStatus netStatus = [internetReach currentReachabilityStatus];
if (netStatus) {
// NSLog(@"网络通");
}else {
// NSLog(@"网络不通");
}
} // 注意添加systemConfiguration框架;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: