需求:网络请求参数只有字符串怎么办?
问题: 使用AFN请求,请求参数只有一个字符串,因为网络接口全都是经过加密的,加密结果就是一个很长的字符串.
例如:
K9OJC6pAM5ME2FY4iOmOQhHiZtIdpJyDMKx60+5puhw9tRe2xhHGU/uIxG+d1fohc3LuA/5s+kD/CzRy73klAhEQWtagKrMYkBO1+NNxqvNfauICsxruHlrY8AGGYv11/kJUZXYspCfTqhPn3bVvCMirVyPLAL4idURiYHqva4I2ZQLU/gtXF+jw+yep5Vo9T0V0Cnxf7JkvgrSDG1IlKHf2wIXs/8qj04zNqk24uq87LRePL4NFZVYlwgrOLbiXMevNkTp+C7jsa9qsvAtXIwdgNKSHNEHzvL3RZ46J1pev1gxTlOK1X9TDcKyGrdEq1wqICYBi8Yud/GSZmlvOxA==
常规参数传递:@{"data":字符串} 但是实际上是只传String
[manager POST:url parameters:id类型满足只传字符串 progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
{
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
failure(error);
}];
结果后台一直返回400,而且接收不到参数.
解决办法: 如果后台一直接收不到参数只可能是AFN的AFURLRequestSerialization序列化的地方出现了问题 这个是序列化的方法
- (NSString *)URLEncodedStringValue {
if (!self.value || [self.value isEqual:[NSNull null]]) {
return AFPercentEscapedStringFromString([self.field description]);
} else {
return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])];
}
}
方法一. 修改内部源码如下,field指的是传的key
- (NSString *)URLEncodedStringValue
{
if (!self.value || [self.value isEqual:[NSNull null]]) {
return AFPercentEscapedStringFromString([self.field description]);
}else if(!self.field || [self.field isEqual:[NSNull null]]){
return [NSString stringWithFormat:@"%@",self.value];
}else {
return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])];
}
}
方法二. 外部设置
[manager.requestSerializer setValue:@"text/plain;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
找了半天,终于解决了