AFNetworking 2.0:如何传递完整的json param参数转换为base64encoded + urlencoded字符串为AFNetworking 2.0发布请求

时间:2015-07-27 18:05:37

标签: ios objective-c base64 afnetworking-2 url-encoding

我正在使用AFNetworking 2.0&新手。尝试了几个示例WS调用成功。我们实施了Web Service&被称为:

它的数据参数是加密字符串。

请求是:http://demo.XYZ.net/getlanguage //仅举例来说

参数:

1)首先你需要用下面的参数来创建json    字典到字符串

   {
       param =     {
           pone = "com.xyz";
           ptwo = 68208;
           pthree = eda24e95f;
       };
   }

   {"param":{"pone":"com.xyz","ptwo":"68208","pthree":"eda24e95f"}}

2)然后将json字符串转换为base64encode

   something like: eyJob21lIjp7InNGFlMGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQiOiI3OTU2IiwicGFj5uY19

3)然后将字符串转换为urlencode然后发送加密    带有post方法的“data”中的字符串

eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk

然后最后传递那个编码的字符串如下:

http://demo.XYZ.net/getlanguage?data= eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk

以上WS非常有效。[查看“POSTMan-Chrome-Extension”]

问题是如何在AFNetworking 2.0中实现相同的功能?当我们使用AFHTTPRequestOperationManager时,在哪里使用params加密?

由于

1 个答案:

答案 0 :(得分:4)

如果这确实是您的服务器所需要的,您只需使用param将原始NSJSONSerialization字典转换为JSON,然后使用base64EncodedStringWithOptions对其进行base64编码。完成后,您可以使用该字符串构建新的参数字典:

NSString *urlString = @"http://demo.XYZ.net/getlanguage";

NSDictionary *originalParameters = @{@"param" : @{
                                             @"pone"   : @"com.xyz",
                                             @"ptwo"   : @68208,
                                             @"pthree" : @"eda24e95f"
                                             }
                                     };

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:originalParameters options:0 error:&error];
NSAssert(jsonData, @"JSON encoding failed: %@", error);

NSString *base64EncodedString = [jsonData base64EncodedStringWithOptions:0];

NSDictionary *parameters = @{@"data" : base64EncodedString};

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager GET:urlString parameters:parameters success:^(NSURLSessionDataTask * __nonnull task, id __nonnull responseObject) {
    NSLog(@"responseObject = %@", responseObject);
} failure:^(NSURLSessionDataTask * __nonnull task, NSError * __nonnull error) {
    NSLog(@"error = %@", error);
}];

如果你正在使用AFHTTPRequestOperationManager,基本思路是一样的:将参数字典转换为JSON,base64对其进行编码,然后为其创建新的参数字典并将其提供给GET方法