为什么AFNetworking在放置' |'时会得到不受支持的网址?管道签到网址

时间:2015-01-22 23:28:26

标签: ios objective-c google-places-api afnetworking-2

我一直在使用AFNetworking一段时间,今天遇到了一个奇怪的问题。 我正在使用带有Google Places API的AFNetworking进行GET请求

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=21.283974,-157.836222&radius=1600&types=food|bar|cafe&key=myownapikeyhere

搜索API附近的地方使用type限制来约束您可以从api获得的结果。 see document

你这样做的方法是让参数types=type1|type2|type3|etc,type1,type2,type3是你想要用url获取的地方类型。 当我将网址粘贴到浏览器并请求它时,我设法获得了结果。但每当我将其与AFNetworking一起使用时,'|'符号似乎就会破坏它。它会引发unsupported url错误。

这个问题有原因吗?任何建议都会有所帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

您是否自己构建此网址?如果您使用AFNetworking GET请求的参数,我相信它会正确地逃脱它。但是如果您自己构建URL,则不要让AFNetworking执行必要的百分比转义。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *params = @{@"location" : @"21.283974,-157.836222",
                         @"radius"   : @1600,
                         @"types"    : @"food|bar|cafe",
                         @"key"      : @"myownapikeyhere"};

[manager GET:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"responseObject = %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"error = %@", error);
}];

答案 1 :(得分:2)

太简单了。只需将|替换为%7C

即可
NSString *string = @"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=21.283974,-157.836222&radius=1600&types=food|bar|cafe&key=myownapikeyhere";

NSString *newString = [string stringByReplacingOccurrencesOfString:@"|" withString:@"%7C"];