美文网首页
AFNetworking 原码解析

AFNetworking 原码解析

作者: LT_9999 | 来源:发表于2021-05-31 23:57 被阅读0次

    1、AFURLConnectionOperation
    AFURLConnectionOperation是AFNetworking最基础的类,集成NSOperation类,讲网络请求依附到operation上,从而能够有效控制并观察一个网络请求的创建,进行,取消,完成,暂停恢复,异常等问题或者状态。
    2、AFHTTPRequestOperation
    AFHTTPRequestOperation 是HTTP或者HTTPS协议请求的AFURLConnectionOperation的子类,封装的克接受状态码和内容的类型,判定一个请求结果的是成功还是失败。实际上对系统的HTTP网络请求增加了几个HTTP需要用到的参数。
    3、AFHTTPRequestOperationManager
    AFHTTPRequestOperationManager 类是AFN的核心类,封装完成了一种普通的模式,可以帮助我们轻松友好完成请求的创建,响应的序列化,网络状态的监控以及安全策略以及每一个请求Operation的管理。
    4、AFURLSessionManager
    AFURLSessionManager 是iOS7之后AFN 推出代替AFNRequestOperationManager。
    5、AFURLSessionManager 继承AFURLSessionManager,也是方便HTTP以及HTTPS请求的使用,增加一系列的接口,方便调用。
    6、AFNetworkingReachabilityManager
    网络的连通状态以及网络的类型,检查网络连接情况。
    7、AFSecurityPolicy
    安全策略类,验证 HTTPS 请求的证书是否有效,如果APP中涉及到敏感信息及交易信息,一定要使用HTTPS请求的来保证请求的安全性,用户信息的安全性;封装证书的校验过程,让用户可以轻易的使用,出去了CA机构的验证,还支持SSL 方式的验证

         // .crt --->.cer
        // 证书 ---> 公钥  ---> 随机数 加密
        //  项目本地导入  ---> 谁安装谁就能获取到这个证书
        //  证书:proy.
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];
        NSData   *data    = [NSData dataWithContentsOfFile:cerPath];
        NSSet    *cerSet  = [NSSet setWithObject:data];
        
        AFSecurityPolicy *security = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
        // 默认配置
        [AFSecurityPolicy defaultPolicy];
        security.allowInvalidCertificates = YES;
        security.validatesDomainName      = NO;
        
        NSString *urlstr = @"https://xxx.xxx.34.197:9000/users/abc";
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        // 不安全 -- 授权
        manager.securityPolicy        = security;
        [manager GET:urlstr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"success--%@",responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"fail--%@",error);
            
        }];
    

    8、AFURLRequestSerialization

    1. 符合这个协议的对象处理请求,讲请求参数装换为了query String 或者entity body的形式,并设置必要的header。
      2.构建multipart请求。
      9、AFURLResponseSerialization
      遵循AFURLResponseSerialization协议的对象,用于验证,序列化,响应及相关数据,转换为有用的形式,比如JSON对象,图象,或者mantle模型对象。
      请求过程:
      AFURLConnectionOperation 将Operation和URLConnection结合到一起,利用operation可以监听到状态以及可以建立相互的依赖关系特征,实现了对于一个NSURLConnect对象的完美控制,并将请求的结果通过block返回;
      1.首先我们可以看到创建了一个单例线程,这个线程将会常驻内存,用来处理AFN发起的请求,线程也跟随一个Runloop,AFN将这个runloop的模式设置为NSDefaultRunloopMode,NSDefaultRunloopMode是无法检到connect的连接状态,这说明AFN没有在该线程处理connect完成后的UI刷新工作,而是讲数据抛给主线程,让主线程去做刷新工作。
      2.我们可以看到该类的通过接受请求的字符串,创建了URLRequest以及NSURLConnection对象,进行请求。
      3.实现文件多次使用到了锁,可以保证数据的安全性,当然也实现了几个数据的NSCoping协议,
      4.请求的创建,进行,取消,完成,暂停取消,异常问题的控制,暂停其实是将网络请求取消,但是由于实现NSCoping协议,数据保存了下来,下次请求的时候将已经下载的数据节点一起发送给服务器,告诉服务器这部分数据不需要下载了,服务器根据发送的数据节点返回节点给client端相应的数据即可,从而实现暂停和恢复,也就是断点续传。

    总结:AFN 工作原理其实很简单;
    1.首先有哪些类,分别负责哪些工作,就知其原理了
    AFURLSessionManager 负责请求的管理;
    AFURLConnectionOperation 负责请求的连接;
    AFURLReachabilityManager 负责网络状态、网络连接的监控;
    AFSecurityPolicy 主要负责在需要CA的校验时,进行CA证书的校验;
    AFURLResponseSerialization 负责请求返回数据的序列化;
    AFURLRequestSerialization 负责请求参数的序列化及设置请求头的设置;

    相关文章

      网友评论

          本文标题:AFNetworking 原码解析

          本文链接:https://www.haomeiwen.com/subject/citalltx.html