//AFNetWorking是现在最流行的数据请求方法,不仅包含数据请求,还包含数据解析(也就是同时封装了系统请求类的NSURLConne 和NSJSonSerialization 和NSXMLParser)
//能够兼容IOS6.0也兼容block 语法,同时兼容arc
第一步导入第三方库
第二步 导入头文件 #import "AFHTTPRequestOperationManager.h"
第三步初始化请求队列管理者对象
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
第四步
设置请求数据的样式 只在请求JSON数据时才设置,XML时不设置
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];//@"application/json"固定不变
第五步:开始请求数据并解析(json数据)
//<4>开始请求数据并解析数据.第一个参数,接口地址
[manager GET:kJSONUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//responseObject请求下来的数据
if ([responseObject isKindOfClass:[NSDictionary class]]) {
//json数据
NSLog(@"%@",responseObject);
}
else if ([responseObject isKindOfClass:[NSData class]])
{
//XMl数据
NSLog(@"%@",responseObject);
}
else if ([responseObject isKindOfClass:[NSArray class]])
{
//json数据
NSLog(@"%@",responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error:%@",error.description);
}];
如果是XML数据则为(因为AF自带的XML解析很麻烦,所以我们一般用第三方库GData进行解析)
//请求XML数据,AFNetWorking自带的Xml数据解析类是NSXMLParser,该方法解析XML数据方法比较复杂 我们可以使用GData进行数据解析
//<1>设置请求对象的管理者对象
AFHTTPRequestOperationManager * manger = [AFHTTPRequestOperationManager manager];
//<2>需要关闭AFNetWorking提供的XML数据解析
manger.responseSerializer = [AFHTTPResponseSerializer serializer];
//<3>开始异步请求并且开始Xml数据解析
[manger GET:kXMLUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
if ([responseObject isKindOfClass:[NSData class]]) {
//使用GData进行
//《1》将所有数据都解析出来放到内存中
GDataXMLDocument * doc = [[GDataXMLDocument alloc]initWithData:responseObject encoding:NSUTF8StringEncoding error:nil];
//<2>通过XPath查找解析的数据的路径
NSArray * elements = [doc nodesForXPath:@"/doc/news/title" error:nil];
//<3>获取title数据
for (GDataXMLElement * element in elements) {
//获取节点的内容
NSLog(@"title:%@",element.stringValue);
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
}
拓展---------------------------------------------------------------
//------------拓展 ------判断当前网络状态
/*
AFNetworkReachabilityStatusNotReachable = 0,
AFNetworkReachabilityStatusReachableViaWWAN = 1,
AFNetworkReachabilityStatusReachableViaWiFi = 2,
};
*/
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusReachableViaWiFi)
{
NSLog(@"WIFI");
}
else if (status == AFNetworkReachabilityStatusReachableViaWWAN)
{
NSLog(@"3G/GPRS");
}
else
{
NSLog(@"无网络状态");
}
}];
本文标签:AFNetWorking 进行 GET 网络 请求
版权说明: