iOS-三方框架AFNetworking基本使用

AFNetworking 是基于NSURLConnection, NSOperation开发的一款三方框架,主要用于处理一些关于网络请求上的业务,下文会简单介绍框架中经常使用的功能,如文件的上传,下载,解析.

一.GET&POST 请求

1 .首先最重要的当然是导入头文件

#import "AFNetworking.h"

2. 创建会话管理者(创建的管理者对象并不是单例)

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]

3.最后很简单,只要直接调用方法就可以了

GET后面第一个参数,就是我们所说的请求头,但是这里有个注意问题:平时我们使用NSURLConnection和NSURLSession时发送GET请求时所有内容都是写入请求头中的,也就是请求地址中要加上一大推参数,而在这个方法中AFN将请求体信息单独抽出来,放在红色背景的这块区域,你可以将你所要上传的请求体包装成字典,然后作为参数添加到其中,这样做有个好处就是当我们发送POST请求时, 只需要将此方法中的GET替换成POST即可

get请求    [manager GET:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)
          请求成功,会调用此block,responseObject为响应体信息,内部已经将信息完成了序列化
        NSLog(@"%@--%@",[responseObject class],responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
          如果请求失败,会调用此block error 则为请求失败原因
    }];post请求 可以看出两个方法只差一个单词
       [manager POST:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //3.解析
        NSLog(@"%@--%@",[responseObject class],responseObject);
     ==
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
    }];
}

二.AFN下载文件

1 .同样是简单的方法调用,

 1   //1.创建会话管理者
 2     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 3
 4     //2.创建请求对象
 5     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"随便添加一张网上照片的地址"]];
 6
 7     //3.创建下载任务
 8     /*
 9      第一个参数:请求对象
10      第二个参数:进度回调 downloadProgress(获得进度信息)
11      第三个参数:destination
12                 targetPath:文件的临时存储路径
13                 response:响应头信息
14                 返回值:NSURL(AFN内部已经实现了文件剪切的过程,但是需要我们告诉他应该把文件剪切到哪里)
15      第四个参数:completionHandler 请求完成的时候调用
16                 response:响应头信息
17                 fileP ath==fullPath 文件的最终目录(第三个参数回调的返回值)
18                 error:错误信息
[manager downloadTaskWithRequest:<#(nonnull NSURLRequest *)#> progress:<#^(NSProgress * _Nonnull downloadProgress)downloadProgressBlock#> destination:<#^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response)destination#> completionHandler:<#^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error)completionHandler#>]

这里要注意的是:我们可以在第二个参数回调里监听下载进度(回调返回参数downloadProgress内含参数)

downloadProgress.completedUnitCount /downloadProgress.totalUnitCount)

而第三个参数回调是要有返回值的,返回值就是文件最终的存储位置,正如上面所说,剪切过程在内部实现,你只需要return一个地址,通常的做法,在参数response中有个建议文件名称属性(suggestedFilename),我们将它拼接到沙盒路径下就可以得到一个存储文件地址了,具体代码如下

//        沙盒路径
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
//        拼接全路径
        NSString *fullPath = [path stringByAppendingPathComponent:response.suggestedFilename];
        return fullPath ;
        

三.上传文件

基本用法与下载类似,响应参数也差不多,只有第三个参数需要我们注意,下面代码中已标红

 //1.创建会话管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //2.发送POST请求上传文件
    /*
     第一个参数:请求路径 NSString
     第二个参数:非文件参数
     第三个参数:constructingBodyWithBlock 用来拼接要上传的文件数据
     第四个参数:progress进度回调
     第五个参数:success 上传成功的回调
     第六个参数:failure 失败后的回调
     */
    [manager POST:@"http://120.25.226.232:32433/upload" parameters:nil      constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
         //FileURL:要上传的文件的URL路径
        NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/Desktop/1233.png"];//该方法是简单版本,该方法内部会自动的得到文件的名称以及文件的类型(方法里面name为服务器中存储文件的名称)
        [formData appendPartWithFileURL:fileUrl name:@"file" error:nil];

    } progress:^(NSProgress * _Nonnull uploadProgress) {
        上传进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功---%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败---%@",error);
    }];
}先介绍这些,AFN还有很多实用的方法,下载图片、解析数据等,很方便实用有时间再多写一些.
时间: 2024-10-17 05:17:50

iOS-三方框架AFNetworking基本使用的相关文章

iOS网络框架 AFNetworking

-(void)GetActivationUser{ NSString *url = @"http://app.xxxx.com/music/search?key=%E9%AC%BC%E5%90%B9%E7%81%AF"; //创建请求管理器 AFHTTPRequestOperationManager *requestManager = [[AFHTTPRequestOperationManager alloc] init]; requestManager.responseSeriali

iOS网络层框架之AFNetworking与 ASIHTTPRequest对比

在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法,并且加入异常处理等. 那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?几乎每一个iOS互联网应用开发者都会面对这样的选择题,要从这两个最常用的组件里选出一个好的还真不是那么容易

iOS 视频三方框架VLC

iOS 中的系统自带的视频播放 只支持 mp4/m4v/mov 的格式播放,如果想播放其他格式类型的视频文件,那么系统自带的框架是播放不了的,正因为如此,我们才需要一款优秀的三方框架 来进行播放各种不同格式类型的视频文件. VLC 是多媒体是一种支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议. VLC框架跨平台可移植性高,在众多系统中广为使用.当然这只是对其的了解. 下面说重点. 那么这么牛逼的东西怎么用在iOS开发中呢. 1,去VCL官方网站下载框架,(

IOS第三方框架集合-02

IOS第三方框架集合 Reachability 检测网络连接 用来检查网络连接是否可用:包括WIFI和WWAN(3G/EDGE/CDMA等)两种工作模式. 现在有更好的替代品:https://github.com/tonymillion/Reachability,比Apple提供的兼容性更好,而且更加好用,更具体的使用方法请看它提供的例子. Reachability reach = [Reachability reachabilityWithHostname:@"www.google.com&q

iOS常用框架源码分析

SDWebImage NSCache 类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁 在内存不足时NSCache会自动释放存储的对象,不需要手动干预 NSCache的key不会被复制,所以key不需要实现NSCopying协议 第三方框架 网络 1.PPNetworkHelper 对AFNetworking 3.x 与YYCache的二次封装 简单易用,包含了缓存机制,控制台可以直接打印json中文字符 2..YTKNetwork 猿题库研发团队基于AFNetworki

详解OS X和iOS图像处理框架Core Image

转自:http://www.csdn.net/article/2015-02-13/2823961-core-image 摘要:本 文结合实例详解了OS X和iOS图像处理框架Core Image的使用,如何通过Core Image来创建和使用iOS的内置滤镜,非常适合初学者学习.虽然示例代码是用Swift写的iOS程序,不过实现概念很容易转换到 Objective-C和OS X. 这篇文章会为初学者介绍一下Core Image,一个OS X和iOS的图像处理框架. 如果你想跟着本文中的代码学习

iOS Social框架

现在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.空间等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社交分享功能,利用这个框架开发者只需要几句代码就可以实现内容分享.下面就以一个分享到新浪微博的功能为例来演示Social框架的应用,整个过程分为:创建内容编辑控制器,设置分享内容(文本内容.图片.超链接等),设置发送(或取消)后的回调事件,展示控制器. 程序代码: 1 // 2 // ViewController.m

iOS OpenGLES 框架相关 24 篇文档排序整理

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. OpenGLES Use a compact, efficient subset of the OpenGL API for 2D and 3D

iOS Foundation 框架中 Mutable 的类们

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Mutable 对于那些不能直接对其中内容进行更改的类来说,是一种扩展方式,象数值这类的,不涉及到指针的,就没有 Mutable 子类,可能是因为