#import "ViewController.h"
#import "ASIHTTPRequest.h" //GET请求
#import "ASINetworkQueue.h" //请求队列
#import "ASIFormDataRequest.h" //POST请求
#import "ASIDownloadCache.h" //缓存类
@interface ViewController ()
{
ASIHTTPRequest *_request;
ASINetworkQueue *_asiQueue;
}
@property(nonatomic,assign)IBOutlet UIImageView *imageView;
@property(nonatomic,assign)IBOutlet UIButton *button;
@property(nonatomic,assign)IBOutlet UIButton *cancelbButton;
@end
@implementation ViewController
/**
* self.myURLStr = @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=3";
self.myURLStr = @"http://farm3.staticflickr.com/2846/9823925914_78cd653ac9_b_d.jpg";
self.myURLStr = @"http://photo.candou.com/i/114/826ea823e8ffe792a6fda9e126f6c404";
*/
- (void)viewDidLoad {
[super viewDidLoad];
self.imageView.backgroundColor = [UIColor grayColor];
}
-(IBAction)buttonClick:(id)sender{
// NSString *urlStr = @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=3";
NSString *urlStr = @"http://photo.candou.com/i/114/826ea823e8ffe792a6fda9e126f6c404";
NSURL *url = [NSURL URLWithString:urlStr];
NSString *postUrl1 = @"http://localhost/cgi-bin/post1.cgi";
NSString *postUrl2 = @"http://localhost/cgi-bin/post2.cgi";
NSURL *urlPost1 = [NSURL URLWithString:postUrl1];
NSURL *urlPost2 = [NSURL URLWithString:postUrl2];
NSString *downUrl = @"http://baoxu.local/share/Hao_06/resources.zip";
NSURL *urlDown = [NSURL URLWithString:downUrl];
//GET
//1.同步请求
// [self syncDownload:url];
//2.异步请求
// [self asyncDownload:url];
//3.队列请求
// [self queueRequset:url];
//POST
//4.psot1类型
// [self postRequset:urlPost1];
//5.post2类型
// [self postUpload:urlPost2];
//6.文件下载
// [self downloadFile:urlDown];
//7.缓存设置
[self cacheASIRequest:urlDown];
}
-(IBAction)cancelButtonClick:(id)sender{
//取消请求
[self cancelRequest];
}
#pragma mark -ASI缓存-
-(void)cacheASIRequest:(NSURL*)url{
//默认的缓存所有的GET请求
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];
//单独设置某个请求使用缓存
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
request.cachePolicy = ASIDontLoadCachePolicy;
}
#pragma mark -下载文件-
-(void)downloadFile:(NSURL*)url{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
//设置临时缓存文件目录
request.temporaryFileDownloadPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/resources.zip.tmp"];
//每次下载到数据碎片,储存到这个目录,拼接到一个临时文件上
//下载全部完成后,移到的目录
request.downloadDestinationPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/resources.zip"];
request.didFinishSelector = @selector(downloadOK:);
request.didFailSelector = @selector(downloadNotOK:);
request.didReceiveResponseHeadersSelector = @selector(downloadBegin:);
//设置下载进度的代理
request.downloadProgressDelegate = self;
//是否允许断点续传
request.allowResumeForFileDownloads = YES;
request.delegate = self;
[request startAsynchronous];
}
-(void)downloadBegin:(ASIHTTPRequest*)request{
NSDictionary* dict = request.responseHeaders;
NSLog(@"dict:%@",dict);
}
-(void)downloadOK:(ASIHTTPRequest*)request{
NSLog(@"OK:%@",request.responseData);
}
-(void)downloadNotOK:(ASIHTTPRequest*)request{
NSLog(@"notOK:%@",request.error);
}
//监控下载进度<ASIProgressDelegate>
- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes{
NSLog(@"bytes:%lld",bytes);
}
#pragma mark -POST上传-
-(void)postUpload:(NSURL*)url{
//创建数据类型的请求
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
//设置文件
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"default" ofType:@"png"];
[request setFile:filePath forKey:@"file"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
[request addData:data forKey:@"data"];
request.didFinishSelector = @selector(requestOK:);
request.didFailSelector = @selector(requestNotOK:);
request.delegate = self;
//发送
[request startAsynchronous];
}
#pragma mark -POST请求-
-(void)postRequset:(NSURL*)url{
//创建数据类型的请求
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
//可以自动识别发送的数据类型
//创建键值对
[request setPostValue:@"王失聪" forKey:@"username"];
[request setPostValue:@"woxiangjingjing" forKey:@"password"];
[request setPostValue:@"aslfjlas;fh;sah" forKey:@"messge"];
request.didFinishSelector = @selector(requestOK:);
request.didFailSelector = @selector(requestNotOK:);
request.delegate = self;
//发起请求
[request startAsynchronous];
}
-(void)requestOK:(ASIFormDataRequest*)request{
NSLog(@"%@",request.responseString);
}
-(void)requestNotOK:(ASIFormDataRequest*)request{
NSLog(@"%@",request.error);
}
#pragma mark -队列请求-
-(void)queueRequset:(NSURL*)url{
_request = [ASIHTTPRequest requestWithURL:url];
_request.delegate = self;
//设置回调方法
_request.didFinishSelector = @selector(didFinish:);
_request.didFailSelector = @selector(didFailed:);
//ps:如果其他代理方法中实现了didReceiveData这个方法,那么上面的方法不能返回数据(测试发现)
//实例化ASI的线程队列(继承自官方队列)
_asiQueue = [[ASINetworkQueue alloc]init];
_asiQueue.maxConcurrentOperationCount = 3;
//运行队列
[_asiQueue go];
//将请求添加到队列,即开始请求数据
[_asiQueue addOperation:_request];
}
-(void)cancelRequest{
//_request:
//取消请求(如果下载完成则不允许取消,)
if (_request) {
[_request cancel];
}
//取消所有的回调
[_request clearDelegatesAndCancel];
//通过队列取消请求
_asiQueue.shouldCancelAllRequestsOnFailure = YES;
[_asiQueue cancelAllOperations];
}
-(void)didFinish:(ASIHTTPRequest*)request{
_request = nil;
NSLog(@"%@",request.responseString);
self.imageView.image = [UIImage imageWithData:request.responseData];
}
-(void)didFailed:(ASIHTTPRequest*)request{
_request = nil;
NSLog(@"%@",request.error);
}
#pragma mark -异步下载-
-(void)asyncDownload:(NSURL*)url{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.delegate = self;
/**
request下载完毕会收到回调
将代理通过set语法传过去
采用的是隐式代理,就是说没有声明协议,直接让delegate调用方法
*/
//开始异步
[request startAsynchronous];
}
/**
ASIHTTPRequestDelegate
*/
- (void)requestFinished:(ASIHTTPRequest *)request{
NSLog(@"下载成功,请求到的数据为:%@",request.responseString);
self.imageView.image = [UIImage imageWithData:request.responseData];
}
- (void)requestFailed:(ASIHTTPRequest *)request{
NSLog(@"下载失败:%@",request.error);
}
//- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{
// NSLog(@"下载ing。。。");
//}
#pragma mark -同步下载-
-(void)syncDownload:(NSURL*)url{
//创建ASI请求
ASIHTTPRequest *requset = [ASIHTTPRequest requestWithURL:url];
//启动同步
[requset startSynchronous];
//返回结果
NSError *error = requset.error;
if (error) {
NSLog(@"同步下载出错:%@",error);
}else{
/**
* requset.responseString
requset.responseData
*/
NSLog(@"下载成功,请求到的数据为:%@",requset.responseString);
self.imageView.image = [UIImage imageWithData:requset.responseData];
}
}
// ASIUseDefaultCachePolicy = 0
// 默认缓存策略 不能和其他缓存侧略共有
// 有缓存的数据 不再下了
// ASIDoNotReadFromCacheCachePolicy = 1,
// 所有数据不使用缓存
// ASIDoNotWriteToCacheCachePolicy = 2,
// 不会修改已经得到的缓存
// ASIAskServerIfModifiedWhenStaleCachePolicy = 4,
//先判断是否存在缓存,存在且没有过期,不请求了。否则都请求。如果过期,会自动判断数据和将要下载的数据有没有变化,如果有变化,下载,没变化不下载。下载后会更新缓存
// ASIAskServerIfModifiedCachePolicy = 8,
//与上述几乎一样,每次都会判断数据有没有变化
// ASIOnlyLoadIfNotCachedCachePolicy = 16,
//如果有本地缓存,无论是否过期都使用缓存
// ASIDontLoadCachePolicy = 32,
//不下载,有缓存请求执行,没缓存直接取消请求
// ASIFallbackToCacheIfLoadFailsCachePolicy = 64
//这选项多与其他策略结合使用,当下载失败时使用缓存。
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end