研究这个的原因是碰到一个问题:后端加了http请求的校验,head里要把对应的请求的参数拼接进去,云端按照相同的规则去生成sign,跟我传过去的对比 结果请求方式1 能成功
//方式1
LHRequest *request1 = [[LHRequest alloc] init];
NSString *str1 = [LHCommonUtil jsonStringFromObject:@[@"lumi.4cf8cdf3c878784"]];
request1.path = [NSString stringWithFormat:@"app/dev/query/detail?dids=%@",str1];
request1.params = @{@"dids":str1};
[request1 getAsyncCompletion:^(id response, NSError *error) {
NSLog(@"response==%@ error==%@",response,error);
}];
方式2一直不成功
//方式2
LHRequest *request2 = [[LHRequest alloc] init];
str1 = [LHCommonUtil jsonStringFromObject:@[@"lumi.4cf8cdf3c878784"]];
//转码一下
str1 = [self encodeToPercentEscapeString:str1];
request2.path = [NSString stringWithFormat:@"app/dev/query/detail?dids=%@",str1];
request2.params = @{
};
[request2 getAsyncCompletion:^(id response, NSError *error) {
NSLog(@"response==%@ error==%@",response,error);
}];
}
- (NSString *)encodeToPercentEscapeString: (NSString *)input{
NSString *outputStr =
(__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL, /* allocator */
(__bridge CFStringRef)input,
NULL, /* charactersToLeaveUnescaped */
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
return outputStr;
}
debug了半天,找到原因,我是从path里把对应的keyvalue取出来,里边含有【“在请前进行了编码,我这里应该解码一下,果然改完后,问题解决了。