IOS开发之AFNetWorking的使用

OC语言中在github下载第一,很好用的框架

  • AFHTTPRequestOperationManager是包装了NSURLConnection「已经过时淘汰」,所以了解就好不需要学习
  • AFHTTPSessionManager「包装NSURLSession」,重点学习

一、AFNetWorking的HTTP请求

  • GET和POST请求
  • 注意:POST请求就是把GET换成POST就可以了
- (void)get{
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    NSDictionary *params = @{
                             @"username" : @"520it",
                             @"pwd" : @"520it"
                             };
    [mgr GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"请求成功---%@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"请求失败---%@", error);
    }];
}

二、AFNetWorking文件上传

  • 文件上传是需要设置请求头和请求体的,这两样设置相当繁琐和没有必要。于是 AFNetWorking把它封装起来
  • 请求头
  • 告诉我是特殊请求,是文件上传请求
    • 文件类型MIMEType ,可以百度查找对照表
    • 运行中查找MIMEType ,可以通过发送请求获得request.MIMEType
  • 请求体
  • 文件参数
  • 非文件参数(普通参数

方法一

  • 方法一:我们是需要传入,Data,name, fileName ,mimeType就可以了
  • 方法二:同理
  • 方法三:只需要传入filename、mimeType,其他的参数已经给我们封装好
- (void)upload
{
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    
    [mgr POST:@"http://120.25.226.186:32812/upload" parameters:@{@"username" : @"123"}
        constructingBodyWithBlock:^(id formData) {
        // 在这个block中设置需要上传的文件
//            NSData *data = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/placeholder.png"];
 
            //方法一
//            [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];

            //方法二:自动给封装filename、mimeType
//            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
           
            //方法三:自动给封装filename、mimeType
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" error:nil];
    } success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"-------%@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];
}

方法二

- (void)upload2
{
    
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
 AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
    //上传服务器的地址
    NSString *urlString = @"http://120.25.226.186:32812/upload";
    //配置上传请求
    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:nil constructingBodyWithBlock:^(id formData) {
        NSURL *url = [NSURL fileURLWithPath:@"/Users/jeffrey/Desktop/325120-9212ca74fa78390d.png"];
        [formData appendPartWithFileURL:url name:@"file" error:nil];
    } error:nil];
    //创建上传任务
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", error);
        } else {
            NSLog(@"%@ %@", response, responseObject);
        }
    }];
    //开启上传
    [uploadTask resume];

}

三、AFNetWorking文件下载

  • 由于封装没有多大改变,所以文件下载一般我习惯用苹果自带的NSURLSession
- (void)download
{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
    
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        
        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"File downloaded to: %@", filePath);
        NSLog(@"File downloaded toresponse: %@", response);
    }];
    [downloadTask resume];
}

如何设置解析服务器返回数据

  • 返回格式

  • AFHTTPResponseSerializer---> 二进制格式

  • AFJSONResponseSerializer---> JSON

  • AFXMLParserResponseSerializer---> XML,只能返回XMLParser,还需要自己通过代理方法解析

  • AFXMLDocumentResponseSerializer ---> (Mac OS X)

  • AFPropertyListResponseSerializer ---> PList

  • AFImageResponseSerializer ---> Image

  • AFCompoundResponseSerializer ---> 组合

  • 请求格式

  • AFHTTPRequsetSerializer

  • AFJSONRequsetSerializer

  • AFPropertyRequsetSerializer

IOS开发之AFNetWorking的使用_第1张图片
325120-9212ca74fa78390d.png

你可能感兴趣的:(IOS开发之AFNetWorking的使用)