網(wǎng)絡(luò)通信類庫----AFNetWorking

  • AFNetworking是一個(gè)輕量級(jí)的iOS網(wǎng)絡(luò)通信類庫
  • 它建立在NSURLConnection和NSOperation等類庫的基礎(chǔ)上摊趾,讓很多網(wǎng)絡(luò)通信功能的實(shí)現(xiàn)變得十分簡(jiǎn)單。
  • NSURLConnection是處理網(wǎng)絡(luò)連接的游两。
  • NSOperation是管理NSURLConnection的砾层,可以監(jiān)視一個(gè)請(qǐng)求的生命周期。
  • AFURLConnectionOperation:NSOperation的子類贱案,實(shí)現(xiàn)了NSURLConnection 的代理方法肛炮。
  • AFHTTPRequestOperation:AFURLConnectionOperation的子類,針對(duì)request使用的協(xié)議為HTTP和HTTPS宝踪。
  • AFHTTPRequestOperationManager:封裝了一組調(diào)用請(qǐng)求的方法侨糟。
  • 它支持HTTP請(qǐng)求和基于REST的網(wǎng)絡(luò)服務(wù)(包括GET、POST瘩燥、 PUT秕重、DELETE等)。
  • 支持ARC厉膀。
AFNetworking3.0目前使用NSURLSession作為網(wǎng)絡(luò)類

官方鏈接


對(duì)于iOS7.0以上的系統(tǒng)溶耘,AFNetworking提供了更高級(jí)的方法:

1.AFURLSessionManager:創(chuàng)建、管理基于 NSURLSessionConfiguration 對(duì)象的 NSURLSession 對(duì)象的類服鹅,也可以管理 session 的數(shù)據(jù)凳兵、下載/上傳任務(wù),實(shí)現(xiàn) session 和其相關(guān)聯(lián)的任務(wù)的 delegate 方法企软。
2.AFHTTPSessionManager:封裝了一組調(diào)用請(qǐng)求的方法庐扫。

  • AFNetworking可以檢測(cè)當(dāng)前網(wǎng)絡(luò)的可達(dá)性。

AFNetworkReachabilityManager:這個(gè)類監(jiān)控當(dāng)前網(wǎng)絡(luò)的可達(dá)性澜倦,提供回調(diào) block 和 notificaiton聚蝶,在可達(dá)性變化時(shí)調(diào)用。

  • AFNetworking提供了請(qǐng)求的安全策略藻治。

AFSecurityPolicy:評(píng)估服務(wù)器對(duì)安全連接針對(duì)指定的固定證書或公共密鑰的信任碘勉。將你的服務(wù)器證書添加到 app bundle,以幫助防止 中間人攻擊桩卵。


下面是一些基礎(chǔ)例子:(先導(dǎo)入AFNetworking頭文件)


#pragma mark--------------GET 請(qǐng)求------------
-(void)GET{
    //創(chuàng)建manager請(qǐng)求對(duì)象
    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里面,是請(qǐng)求成功以后里邊返回的字典或者數(shù)據(jù),對(duì)其進(jìn)行解析
        NSLog(@"GET請(qǐng)求成功:%@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"GET請(qǐng)求失敗:%@",error);
    }];

}

- (void)POST{
    //創(chuàng)建manager請(qǐng)求對(duì)象
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    //設(shè)置請(qǐng)求的參數(shù)為json格式
    mgr.requestSerializer = [AFJSONRequestSerializer serializer];
    //設(shè)置響應(yīng)序列化為二進(jìn)制
    mgr.responseSerializer = [AFHTTPResponseSerializer  serializer];
    //設(shè)置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請(qǐng)求成功:%@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"POST請(qǐng)求失敗:%@",error);
    }];
}

注意網(wǎng)絡(luò)請(qǐng)求時(shí)要在info.plist文件里加下面的字段

添加的字段.png
#pragma mark-----文件下載-----
- (void)downLoad{
//創(chuàng)建一個(gè)用來分別配置每一個(gè)session對(duì)象的類,defaultSessionConfiguration:是session的默認(rèn)配置,使用硬盤來存儲(chǔ)緩存數(shù)據(jù)
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //創(chuàng)建manager管理對(duì)象
    AFURLSessionManager *mgr = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration];
    //下載內(nèi)容的接口
    NSURL *url = [NSURL URLWithString:@"http://tj-ctfs.ftn.qq.com/ftn_handler/0c5aea356cbf0c529934369eeabc80d78816ad7059a33ac2e20eaeb88273827d03be89e38025aa8dbdcc2227520993804054d97b81307ceea3ad6ed9982ec64c/AFN+SDW.key"];
    //創(chuàng)建請(qǐng)求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //創(chuàng)建下載任務(wù)
    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];
        //返回和服務(wù)器文件名一樣,當(dāng)我們希望保存 的文件和服務(wù)器的文件名一致時(shí),可以使用這個(gè)名字:suggestedFilename
        return [path URLByAppendingPathComponent:[response suggestedFilename]];
    
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        //打印下載后的存儲(chǔ)路徑
        NSLog(@"文件下載路徑%@",filePath);
    }];
    
    [task resume];
}
#pragma mark-------文件上傳-------
- (void)upload{

    //創(chuàng)建一個(gè)用來分別配置每一個(gè)session對(duì)象的類,defaultSessionConfiguration:是session的默認(rèn)配置,使用硬盤來存儲(chǔ)緩存數(shù)據(jù)
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //創(chuàng)建manager管理對(duì)象
    AFURLSessionManager *mgr = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration];
    //上傳內(nèi)容的接口
    NSURL *url = [NSURL URLWithString:@"http://tj-ctfs.ftn.qq.com/ftn_handler/0c5aea356cbf0c529934369eeabc80d78816ad7059a33ac2e20eaeb88273827d03be89e38025aa8dbdcc2227520993804054d97b81307ceea3ad6ed9982ec64c/AFN+SDW.key"];
    //創(chuàng)建請(qǐng)求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //創(chuàng)建將要上傳文件的路徑
    NSURL *path = [NSURL fileURLWithPath:@""];
    //創(chuàng)建上傳任務(wù)
    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-----網(wǎng)絡(luò)判斷---------------
- (void)reachbility{
//創(chuàng)建網(wǎng)絡(luò)監(jiān)聽管理者對(duì)象
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
    [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未識(shí)別的網(wǎng)絡(luò)");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"2G,3G,4G網(wǎng)絡(luò)");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"wifi網(wǎng)絡(luò)");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"未連接的網(wǎng)絡(luò)");
                break;
            default:
                break;
        }
    }];
    //開啟監(jiān)聽
    [mgr startMonitoring];
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末验靡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雏节,更是在濱河造成了極大的恐慌胜嗓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钩乍,死亡現(xiàn)場(chǎng)離奇詭異辞州,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寥粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門变过,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃元,“玉大人,你說我怎么就攤上這事媚狰〉荷保” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵崭孤,是天一觀的道長(zhǎng)类嗤。 經(jīng)常有香客問我,道長(zhǎng)辨宠,這世上最難降的妖魔是什么遗锣? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮彭羹,結(jié)果婚禮上黄伊,老公的妹妹穿的比我還像新娘。我一直安慰自己派殷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布墓阀。 她就那樣靜靜地躺著毡惜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斯撮。 梳的紋絲不亂的頭發(fā)上经伙,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音勿锅,去河邊找鬼帕膜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溢十,可吹牛的內(nèi)容都是我干的垮刹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼张弛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荒典!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吞鸭,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤寺董,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刻剥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遮咖,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年造虏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了御吞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麦箍。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魄藕,靈堂內(nèi)的尸體忽然破棺而出内列,到底是詐尸還是另有隱情,我是刑警寧澤背率,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布话瞧,位于F島的核電站,受9級(jí)特大地震影響寝姿,放射性物質(zhì)發(fā)生泄漏交排。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一饵筑、第九天 我趴在偏房一處隱蔽的房頂上張望埃篓。 院中可真熱鬧,春花似錦根资、人聲如沸架专。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽部脚。三九已至,卻和暖如春裤纹,著一層夾襖步出監(jiān)牢的瞬間委刘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鹰椒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锡移,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓漆际,卻偏偏與公主長(zhǎng)得像淆珊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灿椅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容