AFNetWorking

AFNetworking是一個輕量級的iOS網絡通信類庫
它建立在NSURLConnection和NSOperation等類庫的基礎上,讓很多網絡通信功能的實現變得十分簡單。NSURLConnection是處理網絡連接的。
NSOperation是管理NSURLConnection的,可以監視一個請求的生命周期。AFURLConnectionOperation:NSOperation的子類,實現了NSURLConnection 的代理方法。
AFHTTPRequestOperation:AFURLConnectionOperation的子類,針對request使用的協議為HTTP和HTTPS。
AFHTTPRequestOperationManager:封裝了一組調用請求的方法。

它支持HTTP請求和基于REST的網絡服務(包括GET、POST、 PUT、DELETE等)。
支持ARC。

AFNetworking3.0目前使用NSURLSession作為網絡類
官方鏈接
對于iOS7.0以上的系統,AFNetworking提供了更高級的方法:
1.AFURLSessionManager
:創建、管理基于NSURLSessionConfiguration
對象的NSURLSession
對象的類,也可以管理 session 的數據、下載/上傳任務,實現 session 和其相關聯的任務的 delegate 方法。2.AFHTTPSessionManager
:封裝了一組調用請求的方法。

AFNetworking可以檢測當前網絡的可達性。
AFNetworkReachabilityManager:這個類監控當前網絡的可達性,提供回調 block 和 notificaiton,在可達性變化時調用。

AFNetworking提供了請求的安全策略。
AFSecurityPolicy:評估服務器對安全連接針對指定的固定證書或公共密鑰的信任。將你的服務器證書添加到 app bundle,以幫助防止 中間人攻擊。

下面是一些實例:(先導入AFNetworking頭文件)

pragma mark--------------GET 請求-------------(void)GET{ //創建manager請求對象 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; [mgr GET:@"http://api.douban.com/v2/event/list?type=all&district=all&loc=108288&photo_cate=image&photo_count=1&start=3&day_type=future&apikey=062bcf31694a52d212836d943bdef876" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //responseObject里面,是請求成功以后里邊返回的字典或者數據,對其進行解析 NSLog(@"GET請求成功:%@",responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"GET請求失敗:%@",error); }];}- (void)POST{ //創建manager請求對象 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; //設置請求的參數為json格式 mgr.requestSerializer = [AFJSONRequestSerializer serializer]; //設置響應序列化為二進制 mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; //設置body NSDictionary *dic = @{@"date":@"20131129",@"startRecord":@"1",@"len":@"5",@"udid":@"1234567890",@"terminalType":@"Iphone",@"cid":@"213"}; [mgr POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx" parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"POST請求成功:%@",responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"POST請求失敗:%@",error); }];}

注意網絡請求時要在info.plist文件里加下面的字段


添加的字段.png

pragma mark-----文件下載------ (void)downLoad{//創建一個用來分別配置每一個session對象的類,defaultSessionConfiguration:是session的默認配置,使用硬盤來存儲緩存數據 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; //創建manager管理對象 AFURLSessionManager *mgr = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration]; //下載內容的接口 NSURL *url = [NSURL URLWithString:@"http://tj-ctfs.ftn.qq.com/ftn_handler/0c5aea356cbf0c529934369eeabc80d78816ad7059a33ac2e20eaeb88273827d03be89e38025aa8dbdcc2227520993804054d97b81307ceea3ad6ed9982ec64c/AFN+SDW.key"]; //創建請求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //創建下載任務 NSURLSessionDownloadTask *task = [mgr downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { //該block需要返回值 NSURL *path = [[NSFileManager defaultManager]URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; //返回和服務器文件名一樣,當我們希望保存 的文件和服務器的文件名一致時,可以使用這個名字:suggestedFilename return [path URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { //打印下載后的存儲路徑 NSLog(@"文件下載路徑%@",filePath); }]; [task resume];}#pragma mark-------文件上傳-------- (void)upload{ //創建一個用來分別配置每一個session對象的類,defaultSessionConfiguration:是session的默認配置,使用硬盤來存儲緩存數據 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; //創建manager管理對象 AFURLSessionManager *mgr = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration]; //上傳內容的接口 NSURL *url = [NSURL URLWithString:@"http://tj-ctfs.ftn.qq.com/ftn_handler/0c5aea356cbf0c529934369eeabc80d78816ad7059a33ac2e20eaeb88273827d03be89e38025aa8dbdcc2227520993804054d97b81307ceea3ad6ed9982ec64c/AFN+SDW.key"]; //創建請求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //創建將要上傳文件的路徑 NSURL *path = [NSURL fileURLWithPath:@""]; //創建上傳任務 NSURLSessionUploadTask *task = [mgr uploadTaskWithRequest:request fromFile:path progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"上傳失敗-----%@",error); }else{ NSLog(@"上傳成功-----%@------%@",response,responseObject); } }]; [task resume];}#pragma mark-----網絡判斷---------------- (void)reachbility{//創建網絡監聽管理者對象 AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]; [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"未識別的網絡"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"2G,3G,4G網絡"); break; case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"wifi網絡"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"未連接的網絡"); break; default: break; } }]; //開啟監聽 [mgr startMonitoring];}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容