//
// AFClient.h
// Soufu580
//
// Created by Cloud on 15/12/18.
// Copyright © 2015年 Soufu580. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AFHTTPSessionManager.h"
@interface AFClient : AFHTTPSessionManager
/**
* 返回该类的一个实例
*
* @return client;
*/
+(instancetype)getHttpClient;
@end
------
//
// AFClient.m
// Soufu580
//
// Created by Cloud on 15/12/18.
// Copyright © 2015年 Soufu580. All rights reserved.
//
/**
* 单例的 AFHTTPSessionManager
*/
#import "AFClient.h"
static NSString *const BASEURL = @"https://112.64.173.178/";
@implementation AFClient
+ (instancetype)getHttpClient
{
static AFClient *client = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
client = [[AFClient alloc] initWithBaseURL:[NSURL URLWithString:BASEURL]];
client.responseSerializer = [AFHTTPResponseSerializer serializer];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
client.securityPolicy = securityPolicy;
client.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil ,nil];
});
return client;
}
@end
---------
//
// BHttpClient.h
// Soufu580
//
// Created by Cloud on 15/12/16.
// Copyright © 2015年 Soufu580. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface HttpUtil : NSObject
+(void) httpGet:(NSString *)urlPath param:(NSDictionary *) dict finish:(void (^) (NSData *date, NSDictionary *obj,NSError *error)) cb;
+(void) httpPost:(NSString *)urlPath param:(NSDictionary *) dict finish:(void (^) (NSData *date, NSDictionary *obj,NSError *error)) cb;
@end
----------
//
// BHttpClient.m
// Soufu580
//
// Created by Cloud on 15/12/16.
// Copyright © 2015年 Soufu580. All rights reserved.
//
#import "HttpUtil.h"
#import "AFNetworking.h"
#include "NsUtil.h"
#import "AFClient.h"
#import "BaseModel.h"
static BOOL isFirst = NO;
static BOOL canCHeckNetwork = NO;
@implementation HttpUtil
+(void) httpGet:(NSString *)urlpath param:(NSDictionary *)dict finish:(void (^)(NSData *,NSDictionary *obj, NSError *))cb{
//1..检查网络连接(苹果公司提供的检查网络的第三方库 Reachability)
//AFN 在 Reachability基础上做了一个自己的网络检查的库, 基本上一样
[self checkNetWork];
//只能在监听完善之后才可以调用
BOOL isOK = [[AFNetworkReachabilityManager sharedManager] isReachable];
//BOOL isWifiOK = [[AFNetworkReachabilityManager sharedManager] isReachableViaWiFi];
//BOOL is3GOK = [[AFNetworkReachabilityManager sharedManager]isReachableViaWWAN];
//网络有问题
if(isOK == NO && canCHeckNetwork == YES){
NSError *error = [NSError errorWithDomain:@"网络错误" code:100 userInfo:nil];
cb(nil, nil,error);
return;
}
//2..实现解析
// AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[[AFClient getHttpClient] GET:urlpath parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) {
//成功 cb是对方传递过来的对象 这里是直接调用
NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
cb(responseObject, [NsUtil replaceUnicode:[NsUtil DataTOjsonString:obj]],nil);
// cb(responseObject, [self replaceUnicode:[self DataTOjsonString:@""]],nil);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//失败
cb(nil, nil ,error);
}];
};
+(void) httpPost:(NSString *)urlpath param:(NSDictionary *)dict finish:(void (^)(NSData *,NSDictionary *obj, NSError *))cb{
//1..检查网络连接(苹果公司提供的检查网络的第三方库 Reachability)
//AFN 在 Reachability基础上做了一个自己的网络检查的库, 基本上一样
[self checkNetWork];
//只能在监听完善之后才可以调用
BOOL isOK = [[AFNetworkReachabilityManager sharedManager] isReachable];
//BOOL isWifiOK = [[AFNetworkReachabilityManager sharedManager] isReachableViaWiFi];
//BOOL is3GOK = [[AFNetworkReachabilityManager sharedManager]isReachableViaWWAN];
//网络有问题
if(isOK == NO && canCHeckNetwork == YES){
NSError *error = [NSError errorWithDomain:@"网络错误 " code:100 userInfo:nil];
cb(nil, nil,error);
return;
}
//2..实现解析
// AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[[AFClient getHttpClient] POST:urlpath parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) {
//成功 cb是对方传递过来的对象 这里是直接调用
// NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
options:NSJSONReadingMutableContainers
error:&err];
BaseModel *baseModel = [[BaseModel alloc] initWithDictionary:dic];
NSLog(@"basenaem: %@",baseModel.msg);
//cb(responseObject, [NsUtil replaceUnicode:[NsUtil DataTOjsonString:obj]],nil);
// cb(responseObject, [self replaceUnicode:[self DataTOjsonString:@""]],nil);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//失败
cb(nil, nil ,error);
}];
};
+(BOOL ) checkNetWork{
if (isFirst == NO) {
//网络只有在startMonitoring完成后才可以使用检查网络状态
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
canCHeckNetwork = YES;
}];
isFirst = YES;
}
return canCHeckNetwork;
}
@end
//调用
-(void) testHttpMsPost{
NSString *urlPath = @"xxx/mmm.do";
NSDictionary*dict = @{@"type":@"1", @"cityId":@"310100",@"userId":@"1e55ff20a7264a0a9a3ebe02b066a5f8"};
[HttpUtil httpPost:urlPath param:dict finish:^(NSData *data,NSDictionary *obj, NSError *error) {
if (error == nil) {
//obj即为解析后的数据.
NSLog(@"parase my download json is %@",obj);
}else{
UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"网络状态" message:@"亲 网络不给力" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[av show];
}
}];
}