iOS 如何处理传递给 AFHTTPSessionManager GET 方法的空格或特殊字符?
Posted
技术标签:
【中文标题】iOS 如何处理传递给 AFHTTPSessionManager GET 方法的空格或特殊字符?【英文标题】:iOS how to deal with spaces or special characters passed to AFHTTPSessionManager GET method? 【发布时间】:2014-08-25 17:05:31 【问题描述】:我有一个 AFHTTPSessionManager
实例负责发出 GET 请求。请求中的参数之一 - 名称中可以包含空格或可能在 URL 中可能不可接受的其他字符。
我看到AFHTTPSessionManager
不会自动用适当的 %symbol 替换空格,所以下面的请求会失败。 如何处理我的字符串以将其转换为与 URL 兼容的字符串? test user to test%20user
我可以通过替换出现的字符串来做字符串,但我正在寻找一种更通用的方法来处理所有非 url 安全字符。
NSURL* baseURL = [NSURL URLWithString:[APP_DELEGATE hostString]];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
//is there a way for me
NSString* path = @"user/?name=test user"
[manager GET:path parameters:nil success:^(NSURLSessionDataTask *task, id responseObject)
DLog(@"Success: %@",responseObject);
failure:^(NSURLSessionDataTask *task, NSError *error)
DLog(@"Failure: %@",error);
];
【问题讨论】:
【参考方案1】:我认为你正在寻找的方法是
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
即:
NSString* path = [@"user/?name=test user" stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
在您的情况下,您可能只需将百分比编码应用于可能包含无效字符的实际值(即“测试用户”)
另一种选择是使用 AFNetworking 的 get 方法提供的 NSDictionary。 使用此选项,您可以使用键/值对 "name":"test user" 创建一个 nsdictionary 然后将其传递给 AF 的 get 方法。 AF 会将其作为查询字符串添加到您的获取路径中。
NSString* path = @"user";
NSDictionary* params = [NSDictionary dictionaryWithObject:@"test user" forKey:@"name"];
[manager GET:path parameters:params success...
【讨论】:
使用 AFNetworking 的 params 字典是一个非常好的解决方案【参考方案2】:我发现以下方法对于适当地编码 URL 特别有用:
- (NSString *)urlEncode:(NSString *)str
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));
【讨论】:
谢谢迈克摇滚!!【参考方案3】:您可以使用AFHTTPRequestSerializer
。
【讨论】:
这是我最初拥有的,但它给出了这个错误:***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效参数不满足:URLString' 更多细节会很好【参考方案4】:您可以将 url 的查询部分放入字典中,并将其作为 parameters
传递。 AFNetworking 将为您处理。正如@aaron 所说。
如果您想自己实现 util 函数,请注意 stringByAddingPercentEscapesUsingEncoding
已弃用。您可以查看 AFNetworking 如何实现它。方法如下:
NSString * AFPercentEscapedStringFromString(NSString *string)
【讨论】:
以上是关于iOS 如何处理传递给 AFHTTPSessionManager GET 方法的空格或特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 如何处理传递给 AFHTTPSessionManager GET 方法的空格或特殊字符?
如何处理枚举中空值的 InvalidFormatException