美文网首页IOS开发牛叉的demoiOS备忘录
使用AFNetWorking 实现参数加密请求

使用AFNetWorking 实现参数加密请求

作者: Touchs | 来源:发表于2016-08-11 12:36 被阅读3170次

用过AFN的都知道,虽说上传参数是id类型的,但是这个id类型只能是字典/数组/集合.... 但是一般对参数加密上传的是NSString类型的啊......

屏幕快照 2016-08-11 11.47.58.png

怎么将你的NSDictionry/NSArry的参数加密后的字符串通过AFN 上传呢?

两种方法.

方法一:
只要在AFN里修改几行代码即可..
在AFURLRequestSerialization.m里
找到- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest )request withParameters:(id)parameters error:(NSError__autoreleasing *)error 这个方法

6148B827-9DD7-4E12-8F66-B91C7C704777.png

图中红色方框中的代码是新加的...
被替换的是 [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];

原理很简单 就是NSMutableUrlRequest 设置请求提的时候,将原本只处理字典和数组的代码 加上判断去处理字符串. 这样后台就能收到你的加密字符串了...

//对字符串/数组/字典的加密 ----以上修改之后可直接上传返回的字符串
- (NSString*)encodedSendingBody:(id)params{
    NSString * dataStr;
    if ([params isKindOfClass:[NSString class]]) {
        dataStr = params;
    }else{
        NSError*error;
        NSData * data =  [NSJSONSerialization dataWithJSONObject:params
                                                         options:0
                                                           error:&error];
        dataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    }
    
//加密操作.
    return  requestBodyStr;
}

方法二:
构建请求参数.直接操作request

 NSMutableURLRequest *request =
    [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"POST"];
    
    //requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    //[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

// 此处设置请求体 (即将参数加密后的字符串,转为data)  
一般是参数字典转json字符串,再将json字符串加密,最后将加密后的字符串转为data 设置为请求体

 [request setHTTPBody: [data dataUsingEncoding:NSUTF8StringEncoding]];

发起请求:

 requestManager = [AFHTTPSessionManager manager];
 requestManager.requestSerializer = [AFJSONRequestSerializer serializer];    requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];

 NSURLSessionDataTask * tesk = [requestManager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        
        if (error) {
            
            failure(error);
            
        }else{
            
            success(responseObject);
        }
    }];
    [tesk resume];

相关文章

网友评论

  • 越来越胖了:对发送的请求加密可以实现了,但是af请求拿到的返回也是一个加密的字符串,而不是正常的json串,请问这个应该怎么办?本想在返回的数据流中先进行解密再继续af的处理,但是我没有找到af中获取到服务器返回的数据的方法,求大神指点。
  • 普罗格兰姆:多谢,帮了大忙
  • Mister志伟:后台返回的请求结果也是加密的,还需要AFN中修改返回的处理结果是吗?
  • 梁森的简书:你说要修改AF里的代码个人感觉不是很好,具体的操作也没细看也没看懂😄
    加密直接对上传的参数进行加密不就可以了吗?
  • e4d93d6aae84:每个公司的加密算法都不一样吧
    Touchs:@f2e90a987a2f 787519869加我明天上班看下
    f2e90a987a2f:可以给个联系方式么? 有问题想请教下
    Touchs:@冰阳life 对的 这要问后台 需要什么加密参数了
  • AT19:77777777777777777777777777777
















    7777777777777777777777777












    77777777777777

本文标题:使用AFNetWorking 实现参数加密请求

本文链接:https://www.haomeiwen.com/subject/jkxssttx.html