AFN的六大模塊
NSURLConnection,
主要對NSURLConnection進行了進一步的封裝,包含以下核心的類:
AFURLConnectionOperation
AFHTTPRequestOperationManager
AFHTTPRequestOperation
NSURLsession,
主要對象NSURLSession對象進行了進一步的封裝,包含以下核心的類:
AFURLSessionManager
AFHTTPSessionManager
Reachability,
提供了與網絡狀態相關的操作接口,包含以下核心的類:
AFNetworkReachabilityManager
Security,
提供了與安全性相關的操作接口,包含以下核心的類:
AFSecurityPolicy
Serialization,
提供了與解析數據相關的操作接口,包含以下核心的類:
AFURLRequestSerialization
AFURLResponseSerialization
UIKit,
提供了大量網絡請求過程中與UI界面顯示相關的操作接口,通常用于網絡請求過程中提示,使用戶交互更加友好,包含以下核心的分類/類:
AFNetworkActivityIndicatorManager
UIActivityIndicatorView+AFNetworking
UIAlertView+AFNetworking
UIButton+AFNetworking
UIImageView+AFNetworking
UIKit+AFNetworking
UiprogressView+AFNetworking
UIRefreshControl+AFNetworking
UIWebView+AFNetworking
AFURLSessionManager
創建任務的方法
普通任務
- (NSURLSessionDataTask*)dataTaskWithRequest:(NSURLRequest*)request completionHandler:(void (^)(NSURLResponse*response, id responSEObject, NSError*error))completionHandler/*** request:請求對象* completionHandler:請求完成調用的Block* response:服務器的響應信息* responseObject:服務器返回的數據* error:錯誤信息*/
上傳任務(分別上傳不同類型的文件)
1. 上傳文件類型的數據
- (NSURLSessionUploadTask*)uploadTaskWithRequest:(NSURLRequest*)request fromFile:(NSURL*)fileURL progress:(NSProgress* __autoreleasing*)progress completionHandler:(void (^)(NSURLResponse*response, id responseObject, NSError*error))completionHandler/*** fileURL:所要上傳文件的路徑*///?
2. 上傳NSData類型的數據
- (NSURLSessionUploadTask*)uploadTaskWithRequest:(NSURLRequest*)request fromData:(NSData*)bodyData progress:(NSProgress* __autoreleasing*)progress completionHandler:(void (^)(NSURLResponse*response, id responseObject, NSError*error))completionHandler/*** bodyData:所要上傳的文件數據*///?
3. 上傳流數據
- (NSURLSessionUploadTask*)uploadTaskWithStreamedRequest:(NSURLRequest*)request progress:(NSProgress* __autoreleasing*)progress completionHandler:(void (^)(NSURLResponse*response, id responseObject, NSError*error))completionHandler/*** request:通過流數據初始化的請求對象*/
下載任務
// 1. 普通下載任務
- (NSURLSessionDownloadTask*)downloadTaskWithRequest:(NSURLRequest*)request progress:(NSProgress* __autoreleasing*)progress destination:(NSURL* (^)(NSURL*targetPath, NSURLResponse*response))destination completionHandler:(void (^)(NSURLResponse*response, NSURL*filePath, NSError*error))completionHandler
/*** progress:管理下載進度* destination:保存數據調用的Block* targetPath:數據的保存路徑* 服務器的響應信息*///
?2. 支持斷點下載的下載任務
- (NSURLSessionDownloadTask*)downloadTaskWithResumeData:(NSData*)resumeData progress:(NSProgress* __autoreleasing*)progress destination:(NSURL* (^)(NSURL*targetPath, NSURLResponse*response))destination completionHandler:(void (^)(NSURLResponse*response, NSURL*filePath, NSError*error))completionHandler
?/*** progress:管理下載進度* resumeData:斷點下載時的斷點信息*/
AFHTTPSessionManager
常用的屬性
baseURL(NSURL *),用于監視網絡可達性與創建請求對象
requestSerializer(AFHTTPRequestSerializer?*),指定指定GET、HEAD與DELETE請求參數的解析格式
responseSerializer(AFHTTPResponseSerializer?*),用于指定服務器返回數據的格式
常用方法
初始化
// 1. 通過工廠方法創建AFHTTPSessionManager對象
+ (instancetype)manager//?
2. 通過構造方法創建AFHTTPSessionManager對象
- (instancetype)initWithBaseURL:(NSURL*)url/*** 根據url初始化AFHTTPSessionManager對象*/- (instancetype)initWithBaseURL:(NSURL*)url sessionConfiguration:(NSURLSessionConfiguration*)configuration/*** 根據url與configuration初始化AFHTTPSessionManager對象*/
請求數據
// 1. GET請求- (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task,id responseObject))success failure:(void (^)(NSURLSessionDataTask *task,NSError *error))failure/*** URLString:請求路徑* parameters:請求參數* success:請求成功時調用的Block* responseObject:服務器返回的數據* failure:請求失敗時調用的Block* error:錯誤信息*///
?2. POST請求- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task,id responseObject))success failure:(void (^)(NSURLSessionDataTask *task,NSError *error))failure/*** 參數含義與GET請求相同*/- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id formData))block success:(void (^)(NSURLSessionDataTask *task,id responseObject))success failure:(void (^)(NSURLSessionDataTask *task,NSError *error))failure/**
* block:用于創建多個數據來源
*/
使用AFN請求網絡數據
請求數據(xml/JSON)
創建AFHTTPSessionManager對象
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
指定對服務器的返回數據格式
//以XML文檔的形式返回數據
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
//以JSON形式返回數據
manager.responseSerializer = [AFJSONResponseSerializer serializer];
設置請求體(類型為XML或JSON)
// 請求體通常由服務器指定格式
NSDictionary *params = @{@"username" :@"賬號",@"pwd" :@"密碼",@"type" :@"XML/JSON"};
發送請求
[manager GET:@"請求路徑" parameters:params success:^(NSURLSessionDataTask *task, id responseObject){
//responseObject:服務器返回的數據? ?
?NSLog(@"請求成功");
} failure:^(NSURLSessionDataTask *task, NSError *error){
//error:錯誤信息? ? NSLog(@"請求失敗");
}];
上傳數據
創建AFHTTPSessionManager對象
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
創建上傳任務
/**基于NSURLConnection*/
[manager POST:@"請求路徑" parameters:@{@"用戶名" : @"密碼"constructingBodyWithBlock:^(id formData) {
//設置需要上傳的文件? ??
NSData *data = [NSData dataWithContentsOfFile:@"所要長傳文件的路徑"];? ??
[formData appendPartWithFileData:dataname:@"file"fileName:@"test.png"mimeType:@"image/png"];
}success:^(NSURLSessionDataTask *task, id responseObject) {
//上傳成功
}failure:^(NSURLSessionDataTask *task, NSError *error) {
//上傳失敗}];
/**基于NSURLSession*/[manager uploadTaskWithRequest:requestfromData:dataprogress:progresscompletionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//上傳數據成功
}];
下載數據
創建AFHTTPSessionManager對象
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
創建下載任務
/**基于NSURLSession*/[manager downloadTaskWithRequest:request progress:progress destination:^NSURL*(NSURL*targetPath, NSURLResponse*response) {? ? // 存儲下載數據是調用的Block} completionHandler:^(NSURLResponse*response, NSURL*filePath, NSError*error) {
//下載完成時調用的Block
}]