一、AFN发送网络请求

知识点:

1. 使用AFN来发送网络请求: 需要创建会话管理者: AFHTTPSessionManager 对象

[AFHTTPSessionManager manager] 这个方法不是一个单例.

2. 请求路径中不能包含参数. GET请求的参数保存到一个字典中.

#import "ViewController.h"
#import "AFNetworking.h"@interface ViewController ()@end@implementation ViewController- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{[self post];
}- (void)get
{//1. 创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];// http://localhost:8080/MJServer/login?username=123&pwd=123&method=get&type=JSON//2. 发送GET请求/*param1: 请求路径(不包含参数) NSString类型param2: 字典(发送给服务器的数据~参数)param3: progress 进度回调param4: success 请求成功回调task: 请求任务responseObject: 响应体信息(JSON-->OC对象)param5: failure 请求失败回调error: 错误信息响应体: task.response*/// 创建字典NSDictionary *dict = @{@"username" : @"zy",@"pwd" : @"zy",@"type" : @"JSON"};[manager GET:@"http://localhost:8080/MJServer/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"%@---%@",[responseObject class],responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"请求失败--%@",error);}];
}- (void)post
{//1. 创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2. 发送GET请求// 创建字典NSDictionary *dict = @{@"username" : @"zy",@"pwd" : @"zy",@"type" : @"JSON"};[manager POST:@"http://localhost:8080/MJServer/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"%@---%@",[responseObject class],responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"请求失败--%@",error);}];
}@end

二、使用AFN实现文件下载

知识点:

1. 会话管理者对象 manager 调用 downloadTaskWithRequest 方法来创建下载任务.

2. progress 块中的 NSProgress中的 completedUnitCount、totalUnitCount属性,来计算下载进度

3. destination 块中 需要返回NSURL对象, 并且内部已经默认作了剪切操作(临时数据 剪切到 文件指定位置)

#import "ViewController.h"
#import "AFNetworking.h"@interface ViewController ()@end@implementation ViewController- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{[self download];
}- (void)download
{//1. 创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2. 确定请求对象NSURL *url = [NSURL URLWithString:@"http://flv2.bn.netease.com/videolib3/1604/28/fVobI0704/SD/fVobI0704-mobile.mp4"];NSURLRequest *request = [NSURLRequest requestWithURL:url];//3. 下载文件/*param1: 请求对象param2: progress 进度回调 downloadProgressparam3: destination回调 (目标位置)有返回值targetPath:临时文件的路径(相当于Location)response: 响应头信息param4: completionHanler 下载完之后的回调filePath: 最终文件的下载路径*/NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {// 下载进度NSLog(@"%f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {// 内部已经 默认做了剪切操作(临时数据 剪切 到文件指定位置)NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:response.suggestedFilename];NSLog(@"targetPath--%@",targetPath);NSLog(@"fullPath--%@",fullPath);return [NSURL fileURLWithPath:fullPath];} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {NSLog(@"filePath--%@",filePath);}];//4. 执行task[download resume];}
@end

三、AFN实现文件上传(POST请求)

使用方法:

[manager POST:<#(nonnull NSString *)#> parameters:<#(nullable id)#> constructingBodyWithBlock:<#^(id<AFMultipartFormData>  _Nonnull formData)block#> progress:<#^(NSProgress * _Nonnull uploadProgress)uploadProgress#> success:<#^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)success#> failure:<#^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)failure#>
    //1. 创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2. 发送post请求上传文件/*第一个参数:请求路径第二个参数:字典(非文件参数)可以传nil第三个参数:constructingBodyWithBlock 处理要上传的文件数据第四个参数:进度回调第五个参数:成功回调 responseObject:响应体信息第六个参数:失败回调*/[manager POST:@"http://localhost:8080/MJServer/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {UIImage *image = [UIImage imageNamed:@"love"];NSData *imageData = UIImageJPEGRepresentation(image, 0);// 使用formData来拼接数据/*param1: 二进制数据 要上传的文件参数param2: 服务器规定的param3: 该文件上传到服务器以什么名称保存*/// [formData appendPartWithFileData:imageData name:@"file" fileName:@"zy.jpg" mimeType:@"image/jpg"];// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/sunny/Desktop/photo/me.jpg"] name:@"file" fileName:@"zy.jpg" mimeType:@"image/jpg" error:nil];[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/sunny/Desktop/photo/me.jpg"] name:@"file" error:nil];} progress:^(NSProgress * _Nonnull uploadProgress) {NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"上传成功---%@",responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"上传失败---%@",error);}];

iOS开发网络篇 一一 AFN的基本使用相关推荐

  1. iOS开发网络篇 一一 文件上传

    下面使用两种方式来实现iOS网络中的文件上传. 注意: 文件上传要发送POST请求 使用 NSURLConnection 来实现 文件上传 使用 NSURLSession 来实现 文件上传 这两种方式 ...

  2. iOS开发网络篇 一一 SDWebImage框架的基本使用

    SDWebImage相关资料链接: http://www.jianshu.com/p/be9a0a088feb SDWebImage的项目文件. SDWebImage框架中的一些内部细节: // 当发 ...

  3. iOS开发网络篇 一一 请求路径(URL)中文转码问题

    当发送网络请求: 确定请求路径URL 时, 观察url中是否包含中文, 如果包含中文 需要将url中的中文进行转码操作. 注意: 上面这种情况 只针对于发送GET请求,因为GET请求的URL 包含用户 ...

  4. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  5. iOS开发网络篇—多线程断点下载

    iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  6. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  7. iOS开发网络篇—数据缓存

    iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以 ...

  8. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇-搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

  9. iOS开发网络篇—文件的上传

    说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: Y ...

最新文章

  1. 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系
  2. CSS动画:有活力的链接下划线
  3. SHELL学习 续2
  4. SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID
  5. Python---已知Person类,继承Person类生成Teacher类(增加参数:科目)和Student类(增加参数:专业)。
  6. 2张表,轻松搞定你的收入问题
  7. java广度优先遍历
  8. 大话数据结构08:共享栈 C++
  9. 数据结构--栈 codevs 1107 等价表达式
  10. 实用的 Python —— os.system() 在 python 语句中执行 dos 命令
  11. Python_命名空间和作用域_25
  12. centos7.0 配置mysql_Centos7.0配置MySQL主从服务器
  13. 电脑如何快速截屏技巧 四种常见的电脑截图方法
  14. 摸鱼摸累了,看几个有趣的网站
  15. java中的Date和时区
  16. 使用Spring Validation 完成后端数据校验
  17. 易语言 vb c 那个写的程序运行快,VB好还是易语言
  18. android xlog崩溃日志,Android第三方log库:xlog使用记录
  19. onenote如何删除笔记本
  20. CSS 文字下划线间距

热门文章

  1. 修改Win10网络名称
  2. React Native Android 应用层实战沦陷记
  3. 掷色子、骰子--链接、随机数
  4. 给IT新人的一些成长指导
  5. RNN循环神经网络原理与示例
  6. [博创智联]创新创客智能硬件平台——超声波测距传感器
  7. 路由与交换技术——静态路由
  8. Android进程保活(常驻内存)
  9. canny边缘检测 java_OpenCV Canny边缘检测
  10. 南京歌德语言中心C1考过时间,现在科二挂了多久能再考2021