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

本文介绍了AFNetworking的基本使用方法,包括GET和POST请求的实现,并提供了一些实用技巧。同时,文章还涉及了iOS9中处理HTTP请求的安全设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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的项目,写有大量注释,且在不断的更新维护中。有兴趣的朋友可以点击下载。



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值