// // ViewController.m // 网络_ASI_ // // Created by 邱学伟 on 15/10/7. // Copyright (c) 2015年 xuewei. All rights reserved. // #import "ViewController.h" #import "ASIHTTPRequest.h" #import "ASIFormDataRequest.h" /** 监听ASI的请求 1.成为代理,遵守ASIHTTPRequestDelegate协议,实现协议中的代理方法 request.delegate = self; - (void)requestStarted:(ASIHTTPRequest *)request; - (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders; - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data; - (void)requestFinished:(ASIHTTPRequest *)request; - (void)requestFailed:(ASIHTTPRequest *)request; 2.成为代理,不遵守ASIHTTPRequestDelegate协议,自定义代理方法 request.delegate = self; [request setDidStartSelector:@selector(start:)]; [request setDidFinishSelector:@selector(finish:)]; 3.设置block [request setStartedBlock:^{ NSLog(@"setStartedBlock"); }]; [request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) { NSLog(@"setHeadersReceivedBlock--%@", responseHeaders); }]; [request setDataReceivedBlock:^(NSData *data) { NSLog(@"setDataReceivedBlock--%@", data); }]; [request setCompletionBlock:^{ NSLog(@"setCompletionBlock"); }]; [request setFailedBlock:^{ NSLog(@"setFailedBlock"); }]; */ @interface ViewController () <ASIHTTPRequestDelegate,ASIProgressDelegate> @property (nonatomic, strong) ASIHTTPRequest *request; @property (nonatomic, weak) IBOutlet UIProgressView *progressView; @property (nonatomic, assign) BOOL downloading; @end @implementation ViewController - (void)viewDidLoad { } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self upload]; } //--------------------------------------------------------------------------- //ASI文件上传 -(void)upload{ //1、URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"]; //2、创建请求对象 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; //3、设置请求参数 [request setPostValue:@"123" forKey:@"username"]; [request setPostValue:@"123" forKey:@"pwd"]; //4、设置文件参数 //方式一:如果知道文件路径最好使用这个方式(简单),ASI内部会自动识别文件的MIMType NSString *filePath = [[NSBundle mainBundle] pathForResource:@"04-Modal" ofType:@"mp4"]; [request setFile:filePath forKey:@"file"]; //方式二:(一般不用) [request setFile:filePath withFileName:@"005.png" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"]; //方式三:如果文件是动态产生的,就用这个方法(比如刚拍完照获得的图片数据) // request setData:<#(id)#> withFileName:<#(NSString *)#> andContentType:<#(NSString *)#> forKey:<#(NSString *)#> //设置监听上传进度的代理 request.uploadProgressDelegate = self.progressView; //5、开始请求 [request startAsynchronous]; //监听完毕 __weak typeof(request) weakrequest = request; [request setCompletionBlock:^{ NSLog(@"上传完毕0-----%@",[weakrequest responseString]); }]; } //--------------------------------------------------------------------------- //ASI文件下载 -(void)download{ if (self.downloading) { [self.request clearDelegatesAndCancel]; self.downloading = NO; }else{ //URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/js.mp4"]; //创建请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 10; //设置文件下载路径 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [caches stringByAppendingPathComponent:@"jjs.mp4"]; request.downloadDestinationPath = filePath; //以上就可以下载文件,,如果想监听下载进度则 //设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议) // request.downloadProgressDelegate = self; //直接设置为进度条的代理更简单,不用实现setProgress方法,会自动调用progressView的set方法 request.downloadProgressDelegate = self.progressView; /** 断点续传: request.allowResumeForFileDownloads = YES; request.temporaryFileDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"temp.temp"]; */ //开始请求 [request startAsynchronous]; self.request = request; self.downloading = YES; } } //-(void)setProgress:(float)newProgress{ // NSLog(@"下载进度——————-%f",newProgress); //} //--------------------------------------------------------------------------- //ASI发送POST请求——需要导入ASIFormDataRequest.h 类 -(void)asynPost{ //url NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"]; //创建一个请求_ASIFormDataRequest 这默认就是发送POST请求 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; //设置请求参数(建议使用setPostValue) [request setPostValue:@"123" forKey:@"username"]; [request setPostValue:@"123" forKey:@"pwd"]; //开始请求 [request startAsynchronous]; //设置监听方法 __weak typeof(request) weakRequest = request; [request setCompletionBlock:^{ NSLog(@"请求完毕-----%@",[weakRequest responseString]); }]; } //--------------------------------------------------------------------------- //直接设置监听方法 -(void)setMoniterMethod{ //url NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; //创建请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 10; //开始请求 [request startAsynchronous]; //设置监听方法 request.delegate = self; [request setDidStartSelector:@selector(start:)]; [request setDidFinishSelector:@selector(finish:)]; } -(void)start:(ASIHTTPRequest *)request{ NSLog(@"start -- %@",request); } -(void)finish:(ASIHTTPRequest *)request{ NSLog(@"finish -- %d, %@, %@",[request responseStatusCode],[request responseStatusMessage],[request responseData]); } //--------------------------------------------------------------------------- //异步block监听 -(void)asyncBlock{ //URL NSURL *URL = [NSURL URLWithString:@"HTTP://localhost:8080/MJServer/video"]; //创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:URL]; //设置请求响应时间 request .timeOutSeconds = 10; //开始请求 [request startAsynchronous]; /** 如果同时设置了代理方法和block,请求过程中,两个都会调用 一般的调用顺序:代理方法>block request.delegate = self ; */ //设置block监听 [request setStartedBlock:^{ NSLog(@"setStartedBlock"); }]; [request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) { NSLog(@"setHeadersReceivedBlock-----%@",responseHeaders); }]; [request setDataReceivedBlock:^(NSData *data) { NSLog(@"setDataReceivedBlock------\n%@",data); }]; [request setCompletionBlock:^{ NSLog(@"setCompletionBlock"); }]; [request setFailedBlock:^{ NSLog(@"setFailedBlock"); }]; } //--------------------------------------------------------------------------- //异步的GET请求 -(void)asynGet{ //URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; //创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; //设置请求响应时间 request.timeOutSeconds = 10; //设置代理 request.delegate = self; //开始请求 [request startAsynchronous]; self.request = request; } #pragma mark - 实现ASIHTTPRequest的代理方法 //1、开始发送请求 -(void)requestStarted:(ASIHTTPRequest *)request{ NSLog(@"requestStarted"); } //2、接收到服务器的响应头信息 -(void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders{ NSLog(@"didReceiveResponseHeaders"); } //3、接收到服务器的实体数据(具体数据——调用多次)---(除非监听下载进度否则不要使用) //!!!只要实现了这个方法,就意味着用户自己处理数据,responseData和responseString没有值 //-(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{ // NSLog(@"didReceiveData"); //} //4、服务器的响应数据接收完毕 -(void)requestFinished:(ASIHTTPRequest *)request{ NSLog(@"requestFinished"); } //5、请求失败调用 -(void)requestFailed:(ASIHTTPRequest *)request{ NSLog(@"requestFailed"); } //同步的GET请求 -(void)synGet{ //1、url NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; //2、创建一个请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; //设置超时时间 request.timeOutSeconds = 10; //3、开始请求 [request startSynchronous]; //4、请求完毕 NSError *error = [request error]; if (error) { NSLog(@"请求失败---%@",error); }else{ NSData *data = [request responseData]; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSLog(@"请求成功---%@",dict); } } @end