AFN(反序列化+訪問圖片+訪問網(wǎng)頁+網(wǎng)絡(luò)狀態(tài))


JSON

#import "ViewController.h"
#import "YYHttpTool.h"http:// 網(wǎng)絡(luò)請求工具類,基于AFN的封裝
@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self JSON];
}

//AFN內(nèi)部默認(rèn)已經(jīng)做了反序列化處理
-(void)JSON
{
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //參數(shù)單獨(dú)寫出來
    NSDictionary *dictM = @{@"type":@"JSON"};
    
    //2.發(fā)請求
    [manager GET:@"http://120.25.226.186:32812/video" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        //通過打印下面的代碼可知,內(nèi)部已經(jīng)把JOSN數(shù)據(jù)轉(zhuǎn)換層OC對象(字典)。即用responseObject表示出來,也就是服務(wù)器返回給訪問者的數(shù)據(jù)類型是字典類型的數(shù)據(jù)
        NSLog(@"成功--%@",responseObject);
        NSLog(@"成功--%@",[responseObject class]);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失敗--%@",error);
    }];
}

@end

截圖:


XML

#import "ViewController.h"
#import "YYHttpTool.h"http:// 網(wǎng)絡(luò)請求工具類,基于AFN的封裝
@interface ViewController ()<NSXMLParserDelegate>

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self XML];
}

-(void)XML
{
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //修改對響應(yīng)體信息的解析方式(默認(rèn)是用JSON解析數(shù)據(jù),即1),修改為用XML解析數(shù)據(jù)(即2).如果注釋2,則打印NSData數(shù)據(jù)
    //manager.responseSerializer = [AFJSONRequestSerializer serializer];//1
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];//2
    
    NSDictionary *dictM = @{@"type":@"XML"};
    
    //2.發(fā)請求
    [manager GET:@"http://120.25.226.186:32812/video" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        //NSLog(@"成功--%@",responseObject);
        NSXMLParser *parser = (NSXMLParser *)responseObject;
        
        //設(shè)置代理
        parser.delegate = self;
        
        //開始解析
        [parser parse];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失敗--%@",error);
    }];
}

#pragma mark NSXMLParserDelegate
//開始解析某個(gè)元素的時(shí)候回調(diào)用,并且這個(gè)方法會被調(diào)用多次
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
    NSLog(@"%@--%@",elementName,attributeDict);
}

@end

截圖:

31-20.gif

訪問圖片

#import "ViewController.h"
#import "YYHttpTool.h"http:// 網(wǎng)絡(luò)請求工具類,基于AFN的封裝
@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self Picture];
}
//發(fā)送訪問圖片的請求
-(void)Picture
{
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //修改數(shù)據(jù)的解析方式
    //3種解析方式:JSON & XML &http(不做任何處理)
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];//用XML解析數(shù)據(jù)
    
    //2.發(fā)請求
    [manager GET:@"http://120.25.226.186:32812/resources/images/minion_02.png" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"成功--%@",[responseObject class]);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失敗--%@",error);
    }];
}

@end

打印結(jié)果

2016-08-14 18:27:23.398 AFN之訪問圖片 [15180:1110061] 成功--_NSInlineData

訪問網(wǎng)頁

#import "ViewController.h"
#import "YYHttpTool.h"http:// 網(wǎng)絡(luò)請求工具類,基于AFN的封裝
@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self Website];
}

//(發(fā)送訪問網(wǎng)頁的請求)
-(void)Website
{
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //內(nèi)容類型為text/html
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    //2.發(fā)請求(發(fā)送登錄網(wǎng)頁的請求)
    [manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        //內(nèi)部已經(jīng)把JOSN數(shù)據(jù)轉(zhuǎn)換層OC對象(字典)
        
        NSLog(@"成功--%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);//把二進(jìn)制數(shù)據(jù)responseObject轉(zhuǎn)換成字符串NSString
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失敗--%@",error);
    }];
}

@end

截圖:

31-21.gif

網(wǎng)絡(luò)狀態(tài)

#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()

@end

@implementation ViewController

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self NetworkStatus];
}
-(void)NetworkStatus{
    //1.通過網(wǎng)絡(luò)監(jiān)測管理者監(jiān)聽狀態(tài)的改變
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        
        /*
         AFNetworkReachabilityStatusUnknown          = -1,  未知
         AFNetworkReachabilityStatusNotReachable     = 0,   沒有網(wǎng)絡(luò)
         AFNetworkReachabilityStatusReachableViaWWAN = 1,   3G|4G
         AFNetworkReachabilityStatusReachableViaWiFi = 2,   WIFI
         */
        switch (status) {
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WIFI");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"3G&4G");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"沒有網(wǎng)絡(luò)");
                break;
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知");
                break;
            default:
                break;
        }
        
    }];
    
    //2.開始監(jiān)聽
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
}

@end

打印結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容