AFN的使用方式

@implementation ZWViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
    [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        // 当网络状态发生改变的时候调用这个block
        switch (status) {
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WIFI");
                break;
                
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"自带网络");
                break;
                
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"没有网络");
                break;
                
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知网络");
                break;
            default:
                break;
        }
    }];
    // 开始监控
    [mgr startMonitoring];
}


- (void)dealloc
{
    [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
}


@end






ASIO的基础了解






#import "HMViewController.h"
#import "ASIHTTPRequest.h"


@interface HMViewController () <ASIHTTPRequestDelegate>
@property (nonatomic, strong) ASIHTTPRequest *request;
@end


@implementation HMViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self asynGet];
}


/**
 *  异步的GET请求
 */
- (void)asynGet
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/video"];
    
    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.timeOutSeconds = 15; // 15秒后服务器还没有响应,就算超时
    // 设置代理
    request.delegate = self;
    
    // 3.开始请求
    [request startAsynchronous];
    
    self.request = request;
}


- (void)dealloc
{
    // 这句代码为了防止:控制器销毁了,request还回来调用控制器的代理方法,引发野指针
    [self.request clearDelegatesAndCancel];
}


#pragma mark - ASIHTTPRequestDelegate
/**
 *  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-%@", data);
//}
/**
 *  4.服务器的响应数据接收完毕
 */
- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSLog(@"requestFinished--%@", [request responseData]);
}
/**
 *  5.请求失败
 */
- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSLog(@"requestFailed");
}




/**
 *  同步的GET请求
 */
- (void)synGet
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/video"];
    
    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.timeOutSeconds = 15; // 15秒后服务器还没有响应,就算超时
    
    // 3.开始请求(这行代码会卡主,等待服务器给数据)
    [request startSynchronous];
    
    // 4.请求完毕
    NSError *error = [request error];
    if (error) {
        NSLog(@"请求失败---%@", error);
    } else {
        NSData *data = [request responseData];
        //        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        //        NSString *str = [request responseString];
        
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSLog(@"请求成功---%@", dict);
    }
}


@end










ASIO的基础了解


#import "HMViewController.h"
#import "ASIHTTPRequest.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 HMViewController () <ASIHTTPRequestDelegate>
@end


@implementation HMViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/video"];
    
    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    
    // 3.开始请求
    [request startAsynchronous];
    
    // 4.设置监听方法
    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]);
}


- (void)asyncBlock
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/video"];
    
    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    
    // 如果同时设置了block和实现了代理方法,请求过程中,block和代理方法都会调用,
    // 一般的调用顺序:代理方法 > block
    //    request.delegate = self;
    
    // 3.开始请求
    [request startAsynchronous];
    
    // 4.设置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");
    }];
}


//- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data
//{
//    NSLog(@"didReceiveData--%@", data);
//}
//
//- (void)requestFinished:(ASIHTTPRequest *)request
//{
//    NSLog(@"requestFinished");
//}
@end






ASI-POST请求
@implementation HMViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    
// Do any additional setup after loading the view, typically from a nib.
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/login"];
    
    // 2.创建一个请求对象
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    
    // 3.设置请求参数(建议使用setPostValue多一点)
    [request setPostValue:@"123" forKey:@"username"];
    [request setPostValue:@"123" forKey:@"pwd"];
    
    // 4.开始请求
    [request startAsynchronous];
    
    // 5.设置监听方法
    __weak typeof(request) weakRequest = request;
    [request setCompletionBlock:^{
        NSLog(@"请求完毕--%@", [weakRequest responseString]);
    }];
}
@end






ASI文件下载使用方式
@implementation HMViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    
// Do any additional setup after loading the view, typically from a nib.
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self download];
}


- (void)download
{
    if (self.downloading) {
        [self.request clearDelegatesAndCancel];
        
        self.downloading = NO;
    } else {
        // 1.URL
        NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/resources/test.mp4"];
        
        // 2.创建一个请求对象
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        
        // 3.设置文件的缓存路径
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *filepath = [caches stringByAppendingPathComponent:@"test.mp4"];
        request.downloadDestinationPath = filepath;
        
        // 4.设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议)
        request.downloadProgressDelegate = self.progressView;
        
        // 这个属性设置为YES,就会支持断点下载
        request.allowResumeForFileDownloads = YES;
        
        // 如果要实现断点续传,需要设置一个文件的临时路径
        request.temporaryFileDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.temp"];
        
        // 5.开始请求
        [request startAsynchronous];
        self.request = request;
        
        self.downloading = YES;
    }
}


//- (void)setProgress:(float)newProgress
//{
   NSLog(@"下载进度--%f", newProgress);
//    self.progressView.progress = newProgress;
//}
@end








ASI-文件上传
@implementation HMViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    
//    ASINetworkQueue *queue = [ASINetworkQueue queue];
//    queue.shouldCancelAllRequestsOnFailure = YES;
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/ZWServer/upload"];
    
    // 2.创建一个请求对象
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    
    // 3.设置请求参数
    [request setPostValue:@"zhangsan" forKey:@"username"];
    [request setPostValue:@"123" forKey:@"pwd"];
    [request setPostValue:@"28" forKey:@"age"];
    [request setPostValue:@"1.89" forKey:@"height"];
    
    // 设置文件参数
    NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
    // 如果知道文件路径,最好就用这个方法(因为简单)
    // ASI内部会自动识别文件的MIMEType
    [request setFile:file forKey:@"file"];
//    [request setFile:file withFileName:@"basic.pptx" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"];
    
    // 如果文件数据是动态产生的,就用这个方法(比如刚拍照完获得的图片数据)
//    [request setData:<#(id)#> withFileName:<#(NSString *)#> andContentType:<#(NSString *)#> forKey:<#(NSString *)#>];
    
    // 4.设置监听上传进度的代理
    request.uploadProgressDelegate = self.progressView;
    
    // 5.开始请求
    [request startAsynchronous];
    
    // 6.监听完毕
    __weak typeof(request) weakRequest = request;
    [request setCompletionBlock:^{
        NSLog(@"%@", [weakRequest responseString]);
    }];
}
@end



















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AFNetworking是一个基于Objective-C语言的iOS网络请求框架,它提供了一系列方便的API,帮助开发者快速地进行网络请求并处理响应内容。其原理是基于NSURLConnection和NSURLSession建立的网络请求,通过对网络请求的封装,提供了比原生API更加便捷的操作方式。 常用操作包括: 1. 发起网络请求:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的GET、POST等方法,可以方便地发起网络请求。 2. 设置请求参数:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setParameterEncoding方法或AFHTTPRequestSerializer类的setQueryStringSerializationWithStyle方法,可以设置请求参数的编码格式。 3. 设置请求头:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setValue:forHTTPHeaderField方法,可以设置请求头信息。 4. 处理响应数据:使用AFHTTPRequestOperation类的completionBlock或AFHTTPSessionManager类的dataTaskWithRequest:completionHandler方法,可以处理请求响应数据。 5. 下载文件:使用AFHTTPRequestOperation类的setDownloadProgressBlock和setCompletionBlockWithSuccess方法或AFHTTPSessionManager类的downloadTaskWithRequest:progress:destination:completionHandler方法,可以实现文件下载功能。 6. 上传文件:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的POST方法和AFHTTPRequestSerializer类的multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock方法,可以实现文件上传功能。 总体来说,AFNetworking提供了丰富的API和良好的封装,使得iOS开发者能够更加方便地进行网络请求和处理响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值