AFNetworking 2.0:如何为 AFNetworking 2.0 Post 请求传递完整的 json 参数转换为 base64encoded + urlencoded 字符串
AFNetworking 2.0: How to pass complete json param argument converted as base64encoded + urlencoded string for AFNetworking 2.0 Post Request
我正在使用 AFNetworking 2.0 并且是新版本。成功尝试了几个示例 WS 调用。我们已经实现了 Web 服务并被称为:
数据参数为加密字符串
请求是: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然后加密发送
"data" 中的字符串,使用 post 方法
eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk
然后最后按如下方式传递编码字符串:
http://demo.XYZ.net/getlanguage?data=eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk[=178]
以上 WS 完美运行。[已检查 "POSTMan-Chrome-Extension"]
问题是如何使用 AFNetworking 2.0 实现相同的功能?当我们使用 AFHTTPRequestOperationManager 时,在哪里使用上面的参数加密?
谢谢
如果这确实是您的服务器所需要的,您只需使用 NSJSONSerialization
将原始 param
字典转换为 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
方法。
我正在使用 AFNetworking 2.0 并且是新版本。成功尝试了几个示例 WS 调用。我们已经实现了 Web 服务并被称为:
数据参数为加密字符串
请求是: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然后加密发送 "data" 中的字符串,使用 post 方法
eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk
然后最后按如下方式传递编码字符串:
http://demo.XYZ.net/getlanguage?data=eyJob21lIjp7InNpZ24iOiJiZmU4Y2RmZGEzZDg1Mzg3YTNkYmFlZDQ5MzBiMCIsInNhbHQi%0AOiI3OTU2IiwicGFja2FnZSI6ImNvbS5uYmJk[=178]
以上 WS 完美运行。[已检查 "POSTMan-Chrome-Extension"]
问题是如何使用 AFNetworking 2.0 实现相同的功能?当我们使用 AFHTTPRequestOperationManager 时,在哪里使用上面的参数加密?
谢谢
如果这确实是您的服务器所需要的,您只需使用 NSJSONSerialization
将原始 param
字典转换为 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
方法。