使用AFNetWorking 實現(xiàn)參數(shù)加密請求

用過AFN的都知道,雖說上傳參數(shù)是id類型的,但是這個id類型只能是字典/數(shù)組/集合.... 但是一般對參數(shù)加密上傳的是NSString類型的啊......

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

怎么將你的NSDictionry/NSArry的參數(shù)加密后的字符串通過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 設置請求提的時候,將原本只處理字典和數(shù)組的代碼 加上判斷去處理字符串. 這樣后臺就能收到你的加密字符串了...

//對字符串/數(shù)組/字典的加密 ----以上修改之后可直接上傳返回的字符串
- (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;
}

方法二:
構建請求參數(shù).直接操作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"];

// 此處設置請求體 (即將參數(shù)加密后的字符串,轉為data)  
一般是參數(shù)字典轉json字符串,再將json字符串加密,最后將加密后的字符串轉為data 設置為請求體

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

發(fā)起請求:

 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];
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1.在開發(fā)的時候可以創(chuàng)建一個工具類,繼承自我們的AFN中的請求管理者,再控制器中真正發(fā)請求的代碼使用自己封裝的工具...
    紅樓那一場夢閱讀 3,627評論 2 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • AFN什么是AFN全稱是AFNetworking,是對NSURLConnection、NSURLSession的一...
    醉葉惜秋閱讀 1,344評論 0 0
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,704評論 2 4
  • 訪問網(wǎng)絡的基本流程:5點 HTTP協(xié)議 2.通信過程 --------------請求的方法-----get 和 ...
    光明程輝閱讀 1,103評論 0 2

友情鏈接更多精彩內(nèi)容