asihttprequest 网络请求类封装

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值