AFN的六大模塊
1,NSURLConnection
主要對NSURLConnection進行了進一步的封裝,包含以下核心的類:
AFURLConnectionOperation
AFHTTPRequestOperationManager
AFHTTPRequestOperation
2,NSURLsession
主要對象NSURLSession對象進行了進一步的封裝,包含以下核心的類:
AFURLSessionManager
AFHTTPSessionManager
3,Reachability
提供了與網絡狀態相關的操作接口,包含以下核心的類:
AFNetworkReachabilityManager
4,Security
提供了與安全性相關的操作接口,包含以下核心的類:
AFSecurityPolicy
5,Serialization
提供了與解析數據相關的操作接口,包含以下核心的類:
AFURLRequestSerialization
AFURLResponseSerialization
6,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. 上傳文件類型的數據
/**
* fileURL:所要上傳文件的路徑
*/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
// 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 <AFMultipartFormData> 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<AFMultipartFormData> formData) {
//設置需要上傳的文件
NSData *data = [NSData dataWithContentsOfFile:@"所要長傳文件的路徑"];
[formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
//上傳成功
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//上傳失敗
}];
/**基於NSURLSession*/
[manager uploadTaskWithRequest:request fromData:data progress:progress completionHandler:^(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
}];
-