iOS 心跳包 HTTP Digest认证 MKNetWork做请求

1. MKNetworkEngine * engine = [[MKNetworkEngine alloc] init];

    

2.    MKNetworkOperation * operation = [engine operationWithURLString:oprURLstr params:nil httpMethod:httpMethods];



3. NSDictionary *dic=[LJHeartBeat getDic:dele.errorstr];  //LJHeartBeat中封装的类方法    getDic

        

4.  [operation addHeaders:dic];  // HTTTP Digest认证,详见下面:第7


5.  operation.postDataEncoding = MKNKPostDataEncodingTypeCustom;

    

    [operation setCustomPostDataEncodingHandler:^NSString *(NSDictionary *postDataDict) {

  


        NSLog(@"此处为请求消息体%@",[[NSString alloc] initWithData:Reqdata encoding:NSUTF8StringEncoding]);

       

        return [[NSString alloc] initWithData:Reqdata encoding:NSUTF8StringEncoding];

        

        

    } forType:@"application/xml"

     

     

     ];

    


6.    [operation addCompletionHandler:^(MKNetworkOperation *completedOperation) {

        

      

        

    NSLog(@"完成请求数据%@   完成请求字符串%@",completedOperation.responseData,completedOperation.responseString);



    } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {

        

        

        NSLog(@"%@",error);

      

        

    }];

    

    [engine enqueueOperation:operation];

 operation.postDataEncoding = MKNKPostDataEncodingTypeCustom;

    

    [operation setCustomPostDataEncodingHandler:^NSString *(NSDictionary *postDataDict) {

  


        NSLog(@"此处为请求消息体%@",[[NSString alloc] initWithData:Reqdata encoding:NSUTF8StringEncoding]);

       

        return [[NSString alloc] initWithData:Reqdata encoding:NSUTF8StringEncoding];

        

        

    } forType:@"application/xml"

     

     

     ];

    


  -------------------------------------------------------------


+(NSDictionary *)getDic:(NSString *)errorStr

{

     User *newUser = [User sharedInstance];

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];

    newUser.userId=[defaults objectForKey:@"userid"];

  

    NSLog(@"%@",errorStr);

    

    //  获取realm

    NSString *RealmStr=[self getRealmStrWithErrorStr:errorStr];


    //  获取nounce

    NSString *nounceStrStr=[self getNounceStrWithErrorStr:errorStr];

    

    NSString *responseAfterMd5=[self getRsponseStrWithErrorStr:errorStr];

    

    NSString *useridquota=[self afterAddQuotationFor:newUser.userId];


    

    NSString *strdic=[NSString stringWithFormat:@"Digest userId=\"%@\",nonce=\"%@\",realm=\"%@\",response=\"%@\",uri=\"%@\"",newUser.userId,nounceStrStr,RealmStr,responseAfterMd5,KHEART];

            

    NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:strdic,@"Authorization" ,nil];


return dic;



}




+(NSString *)afterAddQuotationFor:(NSString *)PassStr

{

    NSString *str=[NSString stringWithFormat:@"\"%@\"",PassStr];

    return str;

}




+(NSString *)getRsponseStrWithErrorStr:(NSString *)errorStr

{

    User *newUser=[[User alloc]init];

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];

    newUser.userId=[defaults objectForKey:@"userid"];

    newUser.password=[defaults objectForKey:@"password"];

    NSString *psdAfterMd5=[self md5String:newUser.password];

    

    

    //  获取realm

    NSString *RealmStr=[self getRealmStrWithErrorStr:errorStr];

   


    

    NSString *ha1Str=[NSString stringWithFormat:@"%@:%@:%@",newUser.userId,RealmStr,psdAfterMd5];

    NSString *ha2Str=[NSString stringWithFormat:@"%@:%@",@"POST",@"/sklcloud/skl-cloud/app/Security/AAA/users/heartBeat"];

    

    NSString *ha1StrAfterMd5=[self md5String:ha1Str];

    NSString *ha2StrAfterMd5=[self md5String:ha2Str];


    //  获取nounce

    NSString *nounceStrStr=[self getNounceStrWithErrorStr:errorStr];

    

    

    NSString *responseStr=[NSString stringWithFormat:@"%@,%@:%@",ha1StrAfterMd5,nounceStrStr,ha2StrAfterMd5];

    

    NSString *responseAfterMd5=[self md5String:responseStr];

    

    NSLog(@"%@",responseAfterMd5);

    

    return responseAfterMd5;


}





+(NSString *)getNounceStrWithErrorStr:(NSString *)errorStr

{

// Error Domain=NSURLErrorDomain Code=401 "The operation couldn’t be completed. (NSURLErrorDomain error 401.)" UserInfo=0x7f80f2e4b370 {Transfer-Encoding=Identity, Content-Language=zh-CN, Www-Authenticate=Digest realm="@host.com", nonce="c4d361e697a63e36dbb01c52a92230b7", Server=Apache-Coyote/1.1,

    

    NSString *nounceStr=nil;

    if ([errorStr containsString:@"Code=401"])

    {

        NSRange range1=[errorStr rangeOfString:@"nonce="];

        NSRange range={range1.location+range1.length+1,32};

        nounceStr =[errorStr substringWithRange:range];

        NSLog(@"%@",nounceStr);

    }

    return nounceStr;

}





+(NSString *)getRealmStrWithErrorStr:(NSString *)errorStr

{

    //  判断code是否是401  是的话就执行 否则return

    

    // Error Domain=NSURLErrorDomain Code=401 "The operation couldn’t be completed. (NSURLErrorDomain error 401.)" UserInfo=0x7fea0877d950 {Transfer-Encoding=Identity, Content-Language=zh-CN, Www-Authenticate=Digest realm="@host.com", nonce="673426f2b11200d6844495c4114bd791", Server=Apache-Coyote/1.1, Date=Mon, 11 May 2015 05:32:46 GMT}

    

    NSString *realmStr=nil;

    if ([errorStr containsString:@"Code=401"])

    {

        NSRange range1=[errorStr rangeOfString:@"realm="];

        NSRange range2=[errorStr rangeOfString:@".com"];

        NSRange range={range1.location + range1.length+1 ,range2.location+range2.length-range1.location-range1.length-1};

        NSLog(@"%@",NSStringFromRange(range));

        realmStr=[errorStr substringWithRange:range];

        NSLog(@"%@",realmStr);

    }

    

    return realmStr;

}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值