iOS-ASI

来源:互联网 发布:如何开淘宝 编辑:程序博客网 时间:2024/05/16 02:23
////  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


原创粉丝点击