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 <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 }]
-