1.创建封装类 A;
2.加入依赖库:cfnetwork,systemconfuguer,mobilecore。。。,lib等;
3,
封装的网络请求:
#import <Foudation/Foudation.h>
#import "ASIForDataRequest.h"
@interface WXHLDataService:NSObject
typedef void(^RequestFinishBlock) (id result)
+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFInishBlock)block;
@end
//实现
#import "WXHLDataService.h"
#import “jsonket”
@implemention WXHLDataService
+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFInishBlock)block{
//取得认证信息 token
NSUserDefaults *ddefaults= [NSUserDefaults standarUserDefaults];
NSDictionary *sinaweiboInfo = [defaults objectForkey :@"SinaWeiboAuthData"];
NSString *accessToken = [sinaweiboInfo objectForkey: @ "AccessTokenKey"];
//拼接URl
urlstring = [BASE_URL stringByAppendingFormat :@" %@?access_token=%@ ",urlsting,accessToken];
//处理get请求参数
NSComparisonResult comparRet = [httpMethod caseInsensitiveCompare:@"get"];
if (comparRet ==NSOrderdSame){
NSMutableString * paranstring = [NSMutableString string];
NSArray *allkeys = [params allkeys ];
for(int i=0 ;i<params.count ;i++){
NSString *key = [params objectForkey:key] ;
id value = [params objectForKey:key] ;
[paramsString appendFormat:@"%@ = %@",key,value];
if(i<params.count-1){
[paramsString appendString :@"&"];
}
}
if (paramsString .length>0){
urlsting = [urlstring stringByAppendingFormat:@"&%@",paramstring];
}
}
NSURL *url = [NSURL URLWithString :urlstring];
//声明为block这样不会形成循环引用
_block ASIFormDataRequest *request =[ASIFormDataRequest requestwithUrl:url];
//设置请求超时时间
[request setTimeOutSecond: 60];
[request setRequestMethod:httpMethod];
//处理post请求方式
NSComparisonResult comparRet = [httpMethod caseInsensitiveCompare:@"post"];
if (comparRet ==NSOrderdSame){
NSArry *allkeys = [params allkeys];
id value = [params objectForkey:key];
//判断是否文件上传:
if ([value isKindOfClass:[NSData class]]){
[request addData:value forKey :key];
}
else{
[request addPostValue:value forKey:key];
}
}
//设置请求完成的block 在这里拿到数据并解析
//这里使用了block {}中block会将request retain
// 而set前的request又会将blockretain,相互retain,这样造成了循环引用
//把request 声明成block
[request setCompletionBlock:^{
NSData *data = request.responseData;
float version = WXHLOSVersion();
id result = nil;
if( version >=5.0){
result = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:nil];
}else{
result = [data objectFromJSONData];
}
if(block != nil){
block(result);
}
}] ;
//调用异步请求
[request startAsynchronous];
return nil;
}
@end