美文网首页
AFNetworking详细解析之概况介绍

AFNetworking详细解析之概况介绍

作者: 爱你呢 | 来源:发表于2019-08-28 11:44 被阅读0次

AFNetworking最新版本包含以下几部分:

第一部分:AFSecurityPolicy.m

AFN提供的三种安全策略:

typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {

    AFSSLPinningModeNone,//无校验

    AFSSLPinningModePublicKey,//公钥校验

    AFSSLPinningModeCertificate,//证书校验

};

三个类方法初始化安全策略:

//默认的安全策略,不允许无效的证书,需要验证域名,不会对固定的证书和公钥做校验;

+ (instancetype)defaultPolicy;

//创建并返回一个指定安全模式的策略;

+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;

//创建并返回一个指定安全模式并绑定证书的安全策略。

+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet <NSData *> *)pinnedCertificates;

第二部分:AFNetworkReachabilityManager.m

AFN提供的四种网络状态:

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {

    AFNetworkReachabilityStatusUnknown          = -1,//未知网络

    AFNetworkReachabilityStatusNotReachable    = 0,//没网络

    AFNetworkReachabilityStatusReachableViaWWAN = 1,//蜂窝网络

    AFNetworkReachabilityStatusReachableViaWiFi = 2,//wifi

};

五种初始化方式:

//返回有默认套接字地址的网络管理器单例;

+ (instancetype)sharedManager;

//返回有默认套接字地址的网络管理器;

+ (instancetype)manager;

//返回有指定域的网络管理器;

+ (instancetype)managerForDomain:(NSString *)domain;

//创建并返回具有自定义套接字地址的网络管理器

+ (instancetype)managerForAddress:(const void *)address;

//通过系统的网络检测对象初始化网络管理器

+ (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;

网络状态改变时,block回调:

- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;

第三部分:AFURLRequestSerialization.m

暂定一种HTTP请求序列化类型:

typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) {

    AFHTTPRequestQueryStringDefaultStyle = 0,

};

AFURLRequestSerialization协议:返回一个带指定参数的序列化请求。

AFHTTPRequestSerializer类(遵守AFURLRequestSerialization协议)

对序列化参数进行编码、是否可以用手机流量创建网络、创建请求的缓存策略、创建cookies处理方式、是否在接收请求响应之前继续发送请求、设置超时时间、设置获取请求头信息、设置清除http auth信息、默认和自定义查询字符串序列化方法。

三种创建并返回可变url请求的方法:

//默认方法

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method

                                URLString:(NSString *)URLString

                                parameters:(nullable id)parameters

                                    error:(NSError * _Nullable __autoreleasing *)error;

//自定义block方法

- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method

                                              URLString:(NSString *)URLString

                                            parameters:(nullable NSDictionary <NSString *, id> *)parameters

                              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                                                  error:(NSError * _Nullable __autoreleasing *)error;

//删除HTTPBodySteam

- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request

                            writingStreamContentsToFile:(NSURL *)fileURL

                                      completionHandler:(nullable void (^)(NSError * _Nullable error))handler;

AFJSONRequestSerializer:专门用来处理类型为json的请求

AFPropertyListRequestSerializer:专门用来处理类型为x-plist的请求

第四部分:AFURLResponseSerialization.m

AFURLResponseSerialization协议:返回一个带指定参数的序列化响应协议

AFHTTPResponseSerializer类:初始化响应类、设置响应可接受的状态码、设置响应可接受的Content - Type类型、是否返回有效的响应

AFJSONResponseSerializer:检验和解码application/json、text/json、text/javascript类型的响应

AFXMLParserResponseSerializer:检验和解码application/xml、text/xml类型的响应

AFXMLDocumentResponseSerializer:检验和解码application/xml、text/xml文档类型的响应

AFPropertyListResponseSerializer:检验和解码x-plist类型的响应

AFImageResponseSerializer:检验和解码UIImage和NSImage类型的响应

AFCompoundResponseSerializer:检验和解码多种潜在类型的响应

第五部分:AFURLSessionManager.m

两种初始化方法:

//根据配置信息初始化网络会话

- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration;

//配置信息为nil,初始化网络会话

- (instancetype)init;

取消网络操作:

//是否取消任务,使网络会话失效

- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks;

创建普通网络会话:

//根据请求信息创建网络会话

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

                            completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler DEPRECATED_ATTRIBUTE;

//根据请求信息创建可以查询上传、下载进度的网络会话                           

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

                              uploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                            downloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock

                            completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler;

创建上传网络会话:

//根据请求信息和文件url创建可以查询上传进度的网络会话

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request

                                        fromFile:(NSURL *)fileURL

                                        progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError  * _Nullable error))completionHandler;

//根据请求信息和要上传的数据创建可以查询上传进度的网络会话           

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request

                                        fromData:(nullable NSData *)bodyData

                                        progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler;

//根据请求和输入流创建可以查询上传进度的网络会话

- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request

                                                progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                        completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler;

设置网络请求的回调:

//设置会话失效时回调的block

- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block;

//设置对接收到的http auth进行校验时,回调的block。

- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block;

//设置新的输入流时,回调的block。

- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block;

//设置HTTP重定向时,回调的block。

- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * _Nullable (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block;

//设置对接收到的http auth进行校验时,回调的block。

- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block;

//设置发送的数据时,回调的block。

- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block;

//完成网络任务时进行设置

- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block;

//接收到响应时,回调block

- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block;

//当下载任务完成时,设置网络任务

- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block;

//当数据接收到时,设置网络任务

- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block;

//临时缓存时设置任务

- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block;

//当所有的任务发送出去以后,回调block

- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block;

//当下载任务完成时,回调block

- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable  (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block;

//下载时,写入数据的回调block

- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block;

//设置断点续传的block

- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block;

第六部分:AFHTTPSessionManager.m

四种初始化方法:

//url和配置信息都是nil

+ (instancetype)manager;

//url和配置信息都是nil

+ (instancetype)init;

//配置信息是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url;

//url是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url

          sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration;

//url和配置信息都是nil

+ (instancetype)manager;

//url和配置信息都是nil

+ (instancetype)init;

//配置信息是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url;

//url是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url

          sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration;

网络请求方法[Get,Post,Put,Patch,Delete,Head]:

//GET请求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//可查询下载进度的GET请求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress

                              success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                              failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//HEAD请求

- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//POST请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//可查询上传进度的POST请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//根据表单类型,构建POST网络请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

    constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//PUT请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;//根据表单类型,构建POST网络请求,可查询上传进度

- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//PATCH请求

- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString

                    parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//DELETE请求

- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString

                      parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//GET请求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//可查询下载进度的GET请求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress

                              success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                              failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//HEAD请求

- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//POST请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//可查询上传进度的POST请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//根据表单类型,构建POST网络请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

    constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//PUT请求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;//根据表单类型,构建POST网络请求,可查询上传进度

- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//PATCH请求

- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString

                    parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//DELETE请求

- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString

                      parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

相关文章

网友评论

      本文标题:AFNetworking详细解析之概况介绍

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