IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS AFNetworking 基本原理和请求的封装 -> 正文阅读

[移动开发]iOS AFNetworking 基本原理和请求的封装

一 AFNetworking 请求基本流程

1 生成NSMutableURLRequest 对象

AFHTTPSessionManager 实例对象种自动创建一个 AFHTTPRequestSerializer类型的requestSerializer 对像, 如下图请添加图片描述

2 用requestSerializer 生成一个NSMutableRequest对象

如下图
请添加图片描述
生成MutableRequest的过程中,会将requestSerializer 的 请求头字典
赋值给MutableRequest 的请求头, 如下图
请添加图片描述
并且创建请求Request之后,如果从外面传来了请求头参数,会再次给
request的请求头赋值的
请添加图片描述

3 AFHTTPSessionManager 使用MutableRequest 生成一个 请求任务 NSURLSessionDataTask

请添加图片描述
请添加图片描述
AFHTTPSessionManager 继承于AFURLSession
请添加图片描述

AFHTTPSessionManager 默认持有一个NSURLSession 对象
请添加图片描述

到这里,一个任务就创建成了

二 使用方法

1 直接使用AFHTTPSessionManager 内部生成request 的方式生成task请求

如图请添加图片描述

2 使用AFHTTPRequestSerializer手动生成request , 然后使用 AFHTTPSessionManager生成task请求

如图,这种方式需要手动开启任务

请添加图片描述

3设置请求头

1 直接用AFHTTPSessionManager 设置请求头

请添加图片描述

2 使用request 设置请求头

设置整个请求头
请添加图片描述
也可以单独设置某个键值
请添加图片描述

3 给AFHTTPSessionManager 持有的AFHTTPRequestSerializer设置请求头字典

请添加图片描述

请添加图片描述

4 获取请求相关信息

请添加图片描述

            NSHTTPURLResponse *httpURLResponse = (NSHTTPURLResponse *)task.response;
            /// 响应头字典
            NSDictionary *allHeaderFieldsDict = httpURLResponse.allHeaderFields;
            /// 响应状态码 
            NSInteger code = httpURLResponse.statusCode;
            // 获取需要的字段(这个是要看服务端返回的内容)
            NSString *reqId = [allHeaderFieldsDict objectForKey:ResponsePaperRequestId];

三 常见请求代码

1 普通get请求

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.requestSerializer.timeoutInterval = 15.f;
        NSURLSessionDataTask *task = [manager GET:requestUrl parameters:parameter headers:[self requestHeaderContainContentType:YES] progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            [self handlesuccessResponse:task.response responseData:responseObject userInfo:userInfo];
            [self performSelector:@selector(jsonFinished:) withObject:userInfo];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [self handleFailtureResponse:task.response error:error userInfo:userInfo];
            [self performSelector:@selector(requestFailed:) withObject:userInfo];
        }];
        

2 普通post 请求

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.requestSerializer.timeoutInterval = 15;
        [userInfo setObject:URL forKey:@"requestUrl"];
        NSURLSessionTask *task = [manager POST:requestUrl parameters:parameter headers:[self requestHeaderContainContentType:NO] progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            [self handlesuccessResponse:task.response responseData:responseObject userInfo:userInfo];
            [self performSelector:@selector(jsonFinished:) withObject:userInfo];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [self handleFailtureResponse:task.response error:error userInfo:userInfo];
            [self performSelector:@selector(requestFailed:) withObject:userInfo];
        }];

3 post body 请求


        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:requestUrl parameters:nil error:nil];
        [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        if (parameterString) {
            NSData *paramData =[parameterString dataUsingEncoding:NSUTF8StringEncoding];
            [request setHTTPBody:paramData];
        } else {
            [request setHTTPBody:[NSMutableData data]];
        }
        [request setAllHTTPHeaderFields:[self requestHeaderContainContentType:NO]];
        [[manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
            if (!error) {
                [self handlesuccessResponse:response responseData:responseObject userInfo:userInfo];
                [self performSelector:@selector(jsonFinishedWithBlock:) withObject:userInfo];
            } else {
                [self handleFailtureResponse:response error:error userInfo:userInfo];
                [self performSelector:@selector(requestFailed:) withObject:userInfo];
            }
        }] resume];
        

4 下载请求

        NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"GET" URLString:requestUrl parameters:nil error:nil];
        [request setAllHTTPHeaderFields:[self requestHeaderContainContentType:YES]];
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSURLSessionTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
            NSURL *pathURL = [NSURL URLWithString:[@"file://" stringByAppendingString:filePath]];
            return pathURL;
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            if (!error) {
                [self performSelector:@selector(downloadFinish:) withObject:userInfo];
            } else {
                [self handleFailtureResponse:response error:error userInfo:userInfo];
                [self performSelector:@selector(requestFailed:) withObject:userInfo];
            }
        }] ;
        [task resume];

四 常见报错

1 “NSLocalizedDescription” : @“Request failed: unacceptable content-type: text/html”

请添加图片描述

请添加图片描述
就可以了

        
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        [manager POST:requestUrl parameters:parameter headers:[self requestHeaderContainContentType:NO] progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            [self handlesuccessResponse:task.response responseData:responseObject userInfo:userInfo];
            [self performSelector:@selector(afxmlRequestFinished:) withObject:userInfo];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [self handleFailtureResponse:task.response error:error userInfo:userInfo];
            [self performSelector:@selector(requestFailed:) withObject:userInfo];
        }];
        
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:39:46  更:2022-05-25 11:39:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:56:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码