JSON
#import "ViewController.h"
#import "YYHttpTool.h"http:// 網絡請求工具類,基于AFN的封裝
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self JSON];
}
//AFN內部默認已經做了反序列化處理
-(void)JSON
{
//1.創建會話管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//參數單獨寫出來
NSDictionary *dictM = @{@"type":@"JSON"};
//2.發請求
[manager GET:@"http://120.25.226.186:32812/video" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//通過打印下面的代碼可知,內部已經把JOSN數據轉換層OC對象(字典)。即用responseObject表示出來,也就是服務器返回給訪問者的數據類型是字典類型的數據
NSLog(@"成功--%@",responseObject);
NSLog(@"成功--%@",[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗--%@",error);
}];
}
@end
截圖:
XML
#import "ViewController.h"
#import "YYHttpTool.h"http:// 網絡請求工具類,基于AFN的封裝
@interface ViewController ()<NSXMLParserDelegate>
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self XML];
}
-(void)XML
{
//1.創建會話管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//修改對響應體信息的解析方式(默認是用JSON解析數據,即1),修改為用XML解析數據(即2).如果注釋2,則打印NSData數據
//manager.responseSerializer = [AFJSONRequestSerializer serializer];//1
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];//2
NSDictionary *dictM = @{@"type":@"XML"};
//2.發請求
[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;
//設置代理
parser.delegate = self;
//開始解析
[parser parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗--%@",error);
}];
}
#pragma mark NSXMLParserDelegate
//開始解析某個元素的時候回調用,并且這個方法會被調用多次
-(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:// 網絡請求工具類,基于AFN的封裝
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self Picture];
}
//發送訪問圖片的請求
-(void)Picture
{
//1.創建會話管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//修改數據的解析方式
//3種解析方式:JSON & XML &http(不做任何處理)
manager.responseSerializer = [AFHTTPResponseSerializer serializer];//用XML解析數據
//2.發請求
[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
打印結果
2016-08-14 18:27:23.398 AFN之訪問圖片 [15180:1110061] 成功--_NSInlineData
訪問網頁
#import "ViewController.h"
#import "YYHttpTool.h"http:// 網絡請求工具類,基于AFN的封裝
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self Website];
}
//(發送訪問網頁的請求)
-(void)Website
{
//1.創建會話管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//內容類型為text/html
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//2.發請求(發送登錄網頁的請求)
[manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//內部已經把JOSN數據轉換層OC對象(字典)
NSLog(@"成功--%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);//把二進制數據responseObject轉換成字符串NSString
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗--%@",error);
}];
}
@end
截圖:
31-21.gif
網絡狀態
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)viewDidLoad
{
[super viewDidLoad];
[self NetworkStatus];
}
-(void)NetworkStatus{
//1.通過網絡監測管理者監聽狀態的改變
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
/*
AFNetworkReachabilityStatusUnknown = -1, 未知
AFNetworkReachabilityStatusNotReachable = 0, 沒有網絡
AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G|4G
AFNetworkReachabilityStatusReachableViaWiFi = 2, WIFI
*/
switch (status) {
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G&4G");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"沒有網絡");
break;
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知");
break;
default:
break;
}
}];
//2.開始監聽
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
@end
打印結果