https://github.com/AFNetworking/AFNetworking
一彤钟、AFNetworking主要分為四大模塊:
- NSURLSession(會話管理器)
- Reachability(網(wǎng)絡管理器)
- Security(安全策略)
- Serialization(請求序列化與響應)
二绷落、AFSecurityPolicy.m
AFN提供的三種安全策略:
typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
AFSSLPinningModeNone,//無校驗
AFSSLPinningModePublicKey,//公鑰校驗
AFSSLPinningModeCertificate,//證書校驗
};
三個類方法初始化安全策略:
- 1拨黔、默認的安全策略,不允許無效的證書匾竿,需要驗證域名瓦宜,不會對固定的證書和公鑰做校驗;
+ (instancetype)defaultPolicy;
- 2岭妖、創(chuàng)建并返回一個指定安全模式的策略临庇;
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;
3、創(chuàng)建并返回一個指定安全模式并綁定證書的安全策略昵慌。
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet <NSData *> *)pinnedCertificates;
三苔巨、AFNetworkReachabilityManager.m
AFN提供的四種網(wǎng)絡狀態(tài):
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1,//未知網(wǎng)絡
AFNetworkReachabilityStatusNotReachable = 0,//沒網(wǎng)絡
AFNetworkReachabilityStatusReachableViaWWAN = 1,//蜂窩網(wǎng)絡
AFNetworkReachabilityStatusReachableViaWiFi = 2,//wifi
};
五種初始化方式:
//返回有默認套接字地址的網(wǎng)絡管理器單例;
+ (instancetype)sharedManager;
//返回有默認套接字地址的網(wǎng)絡管理器废离;
+ (instancetype)manager;
//返回有指定域的網(wǎng)絡管理器侄泽;
+ (instancetype)managerForDomain:(NSString *)domain;
//創(chuàng)建并返回具有自定義套接字地址的網(wǎng)絡管理器
+ (instancetype)managerForAddress:(const void *)address;
//通過系統(tǒng)的網(wǎng)絡檢測對象初始化網(wǎng)絡管理器
+ (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;
網(wǎng)絡狀態(tài)改變時,block回調:
- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;
四蜻韭、AFURLRequestSerialization.m
暫定一種HTTP請求序列化類型:
typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) {
AFHTTPRequestQueryStringDefaultStyle = 0,
};
AFURLRequestSerialization協(xié)議:返回一個帶指定參數(shù)的序列化請求悼尾。
AFHTTPRequestSerializer類(遵守AFURLRequestSerialization協(xié)議):
對序列化參數(shù)進行編碼柿扣、是否可以用手機流量創(chuàng)建網(wǎng)絡、創(chuàng)建請求的緩存策略闺魏、創(chuàng)建cookies處理方式未状、是否在接收請求響應之前繼續(xù)發(fā)送請求、設置超時時間析桥、設置獲取請求頭信息司草、設置清除http auth信息、默認和自定義查詢字符串序列化方法泡仗。
三種創(chuàng)建并返回可變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
1搔课、AFURLResponseSerialization協(xié)議:返回一個帶指定參數(shù)的序列化響應協(xié)議。
2截亦、AFHTTPResponseSerializer類:初始化響應類爬泥、設置響應可接受的狀態(tài)碼、設置響應可接受的Content - Type類型崩瓤、是否返回有效的響應袍啡。
3、AFJSONResponseSerializer:檢驗和解碼application/json却桶、text/json境输、text/javascript類型的響應。
4肾扰、AFXMLParserResponseSerializer:檢驗和解碼application/xml畴嘶、text/xml類型的響應蛋逾。
5集晚、AFXMLDocumentResponseSerializer:檢驗和解碼application/xml、text/xml文檔類型的響應区匣。
6偷拔、AFPropertyListResponseSerializer:檢驗和解碼x-plist類型的響應。
7亏钩、AFImageResponseSerializer:檢驗和解碼UIImage和NSImage類型的響應莲绰。
8、AFCompoundResponseSerializer:檢驗和解碼多種潛在類型的響應
六姑丑、AFURLSessionManager.m
兩種初始化方法:
//根據(jù)配置信息初始化網(wǎng)絡會話
- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration;
//配置信息為nil蛤签,初始化網(wǎng)絡會話
- (instancetype)init;
取消網(wǎng)絡操作:
//是否取消任務,使網(wǎng)絡會話失效
- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks;
創(chuàng)建普通網(wǎng)絡會話:
//根據(jù)請求信息創(chuàng)建網(wǎng)絡會話
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler DEPRECATED_ATTRIBUTE;
//根據(jù)請求信息創(chuàng)建可以查詢上傳栅哀、下載進度的網(wǎng)絡會話
- (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;
創(chuàng)建上傳網(wǎng)絡會話:
//根據(jù)請求信息和文件url創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話
- (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;
//根據(jù)請求信息和要上傳的數(shù)據(jù)創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話
- (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;
//根據(jù)請求和輸入流創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request
progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock
completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler;
設置網(wǎng)絡請求的回調:
//設置會話失效時回調的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;
//設置發(fā)送的數(shù)據(jù)時疫向,回調的block。
- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block;
//完成網(wǎng)絡任務時進行設置
- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block;
//接收到響應時豪嚎,回調block
- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block;
//當下載任務完成時搔驼,設置網(wǎng)絡任務
- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block;
//當數(shù)據(jù)接收到時,設置網(wǎng)絡任務
- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block;
//臨時緩存時設置任務
- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block;
//當所有的任務發(fā)送出去以后疙渣,回調block
- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block;
//當下載任務完成時匙奴,回調block
- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block;
//下載時,寫入數(shù)據(jù)的回調block
- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block;
//設置斷點續(xù)傳的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;
網(wǎng)絡請求方法[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;
//根據(jù)表單類型泼菌,構建POST網(wǎng)絡請求
- (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;//根據(jù)表單類型,構建POST網(wǎng)絡請求啦租,可查詢上傳進度
- (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;
//根據(jù)表單類型哗伯,構建POST網(wǎng)絡請求
- (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;//根據(jù)表單類型,構建POST網(wǎng)絡請求篷角,可查詢上傳進度
- (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;