当前位置: 首页 > news >正文

宝哥iOS网络篇-AFNetworking基础使用指南

前言

AFNetworking和ASIHTTPRequest是iOS开发相对主流的框架,网上有很多对比的文章。

本人早在11年开始一直在使用ASI,当时非常流行,后来慢慢的开始使用AF。

如果让我新写一个项目,我会用AF,但我还是强烈建议俩者要兼顾,因为你也不知道你未来的工作项目中会用到什么。

准备

  • 版本: 我建议AFnetworking 3.0
  • 兼容性: iOS7+
  • 传送门:github下载地址 ('or' 使用cocoapods)

基本方法

  • Manager基础设置

    所有的请求方法都是AFHTTPSessionManager对象调用的,因此,我们需要做一些简单的配置 (很多默认值可以不用配置)

     - (AFHTTPSessionManager *)shareAFNManager
     {
       AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
       // 超时时间
       manager.requestSerializer.timeoutInterval = 30.0f;
       // 设置请求头
       //[manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
       // 设置接收的Content-Type
       manager.responseSerializer.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml",@"text/html", @"application/json",@"text/plain",nil];
       return manager;
     }
    复制代码

    注:  很多网络请求会报错,因为没有添加 @"text/plain" ,AF默认的设置里是没有这个的

  • GET请求

    - (void)doGetRequest
    {
       //创建请求地址
       NSString *url=@"http://120.76.205.241:8000/news/qihoo?";
       //设置参数
       NSDictionary *parameters=@{@"kw":@"白",
                                 @"site":@"qq.com",
                                 @"apikey":@"你的key"};
       //AFN管理者调用get请求方法
       [[self shareAFNManager] GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
         //返回请求返回进度
         NSLog(@"downloadProgress-->%@",downloadProgress);
       } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
          //请求成功返回数据 根据responseSerializer 返回不同的数据格式
          NSLog(@"responseObject-->%@",responseObject);
       } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
          //请求失败
          NSLog(@"error-->%@",error);
       }];
    }
    复制代码
  • POST请求

    - (void)doPostRequest
    {
      //创建请求地址
      NSString *url=@"http://120.76.205.241:8000/news/qihoo?";
      //构造参数
      NSDictionary *parameters=@{@"kw":@"白",
                                 @"site":@"qq.com",
                                 @"apikey":@"你的key"};
    
      [[self shareAFNManager] POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
          //返回请求返回进度
          NSLog(@"downloadProgress-->%@",uploadProgress);
      } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
          //请求成功返回数据 根据responseSerializer 返回不同的数据格式
          NSLog(@"responseObject-->%@",responseObject);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
          //请求失败
          NSLog(@"error-->%@",error);
      }];
        
    }
    复制代码

使用技巧

由于AFHTTPSessionManager是单例的模式,

我们在APP启动后配置一次,之后通过每次初始化单例,来调用get或者post方法,显然这样的做法并不是很好。

[AFHTTPSessionManager manager]
复制代码

我建议:在AF的基础上做一层封装

  • 一个Request类:
    作为网络请求,里面有对Manager的配置,公共参数的判断设置等等逻辑
  • 一个Respone类:
    作为对于网络请求后,响应的数据,包括对Error的处理(AF的,接口返回的)等等

在后面的更新中,我会单独写一篇关于网络请求封装的文章。本篇只做基础使用的介绍。

注意:iOS9

在iOS9+的版本中,如果你的网络请求是http的,请按如下方法修改info.plist文件。

添加App Transport Security Settings (NSDictionary类型)

继续添加 key: Allow Arbitrary Loads (Boolean类型) value:YES

本篇示例代码

需要示例代码,请点我!

HeHeThirdCodeDemo 是集成了很多第三方库Demo的项目,写有大量注释,且在不断的更新维护中。有兴趣的朋友可以点击下载。



如有任何问题,可以在下方留言,我会及时解答。

相关文章:

  • JS数组方法汇总
  • [解决方案]sql server复制需要有实际的服务器名称才能连接到服务器
  • 远程管理防火墙一
  • 用yarn替代npm
  • spring boot 整合apache shiro
  • linux用户操作
  • python 遍历本地文件
  • ShaderForge插件分享
  • eclipse不能正常启动
  • ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
  • Vue.js 案例资料汇总
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 软件架构系列二:Clean架构
  • mysql varchar最大长度问题
  • RabbitMQ 高可用集群搭建及电商平台使用经验总结
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【347天】每日项目总结系列085(2018.01.18)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • angular学习第一篇-----环境搭建
  • avalon2.2的VM生成过程
  • es6要点
  • exif信息对照
  • HashMap ConcurrentHashMap
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Redis中的lru算法实现
  • 创建一个Struts2项目maven 方式
  • 从零搭建Koa2 Server
  • 动态魔术使用DBMS_SQL
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 机器学习中为什么要做归一化normalization
  • 基于 Babel 的 npm 包最小化设置
  • 聚簇索引和非聚簇索引
  • 判断客户端类型,Android,iOS,PC
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 容器服务kubernetes弹性伸缩高级用法
  • 事件委托的小应用
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一天一个设计模式之JS实现——适配器模式
  • 【云吞铺子】性能抖动剖析(二)
  • UI设计初学者应该如何入门?
  • ​低代码平台的核心价值与优势
  • # centos7下FFmpeg环境部署记录
  • (js)循环条件满足时终止循环
  • (十一)图像的罗伯特梯度锐化
  • (转)h264中avc和flv数据的解析
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .htaccess配置重写url引擎
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net Core 中间件验签
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net和php怎么连接,php和apache之间如何连接