iOS-AFNetworking特殊字符处理

在使用AFNetworking进行网络交互时,需要注意请求时候的特殊字符处理。

Get请求参数

由于Get请求的参数是直接在URL中,所以,有些字符可能由于编码问题,会识别不出,需要进行替换:

字符 替换
@ %40
+ %2B
/ %2F

Post请求参数

使用AFNetworking进行Post请求时,如果参数是JSON结构体,AFNetworking底部是使用系统函数进行装换成二进制的:

1
2
NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error];
[mutableRequest setHTTPBody:data];

但是,对于‘/‘字符,NSJSONSerialization会自动转换成‘\/‘两个字符,例如预期是”b/“,却转成了”b\/“:

1
2
{"a":"b/"}
{"a":"b\/"}

可能会导致服务端识别错误,所以,需要排除掉‘\‘字符:

1
2
3
4
5
NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error];
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
dataString = [dataString stringByReplacingOccurrencesOfString:@"\\" withString:@""];
data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
[mutableRequest setHTTPBody:data];