使用AFNetworking(https://github.com/AFNetworking/AFNetworking)进行post,或get的网络请求服务端数据。
1、添加AFNetworking框架
通过终端使用pod进行管理
2、添加对应framework
SystemConfiguration.framework
MobileCoreServices.framework
Security.framework
3、使用
3-1、导入头文件
#import "AFNetworking.h"
3-2、封装调用方法
/// 请求样式(post,或get)
typedef NS_ENUM(NSInteger, RequestHttpType)
{
/// 请求样式-post
RequestHttpTypePOST = 1,
/// 请求样式-get
RequestHttpTypeGET = 2,
};
/**
* 网络请求(区分POST、GET)
*
* @param url API接口url
* @param dict API请求参数
* @param type API请求类型(POST、或GET)
* @param complete 请求结果回调
*
* @return NSURLSessionDataTask(便于后续操作处理,如取消请求)
*/
+ (NSURLSessionDataTask *)requestWithUrl:(NSString *)url
paramtes:(NSDictionary *)dict
type:(RequestHttpType)type
complete:(void (^)(id responseObject))complete
{
// 网络异常判断 开始修改时,判断网络情况
BOOL isBadNet = [AFNetworkReachabilityManager sharedManager].isReachable;
NSLog(@"当前网络状态:%@", (isBadNet ? @"不可用" : @"可用"));
if (isBadNet)
{
NSLog("网络断了哦,请检查网络再试");
if (complete)
{
complete(nil);
}
return nil;
}
// 状态栏显示网络加载样式
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// 请求地址
NSString *serverHost = @“192.168.12.22”;
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", serverHost, ((url && 0 != url.length) ? url : @"")];
// 请求参数
NSDictionary *requestParameters = dict;
// 请求类型POST/GET
NSString *requestType = (RequestHttpTypePOST == type ? @"POST" : @"GET");
NSLog(@"\n request\n url=%@\n para=%@\n type=%@", requestUrl, requestParameters, requestType);
// 可变请求
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:requestType URLString:requestUrl parameters:requestParameters error:nil];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSLog(@"\n result\n class=%@\n responseObject=%@", [responseObject class], responseObject);
// 状态栏隐藏网络加载样式
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (complete)
{
complete(responseObject);
}
}];
// 开始请求
[dataTask resume];
// [dataTask cancel];
return dataTask;
}
3-3、使用示例
NSString *url = @"http://op.juhe.cn/onebox/weather/query”;
[AFNetwork requestWithUrl:url paramtes:nil type:RequestHttpTypeGET complete:^(id responseObject) {
NSLog(“responseObject(class = %@) = %@”, [responseObject class], responseObject);
}];
4、使用注意事项
4-1、AFNetworking集成了 reachability 网络监测功能
// 是否有网
BOOL isReachable = [AFNetworkReachabilityManager sharedManager].isReachable;
// 是否WIFI网络
BOOL isReachableViaWiFi = [AFNetworkReachabilityManager sharedManager].isReachableViaWiFi;
// 是否WWAN网络
BOOL isReachableViaWWAN = [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN;
4-2、网络请求的开始,与取消
// 创建网络请求
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", kServerHost, ((url && 0 != url.length) ? url : @"")];
NSDictionary *requestParameters = dict;
NSString *requestType = (RequestHttpTypePOST == type ? @"POST" : @"GET");
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:requestType URLString:requestUrl parameters:requestParameters error:nil];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
}];
// 开始网络请求
[dataTask resume];
// 取消网络请求
[dataTask cancel];