2015-01-22 1 views
2

Я использовал AFNetworking некоторое время и столкнулся с странной проблемой сегодня. я сделать запрос GET с использованием AFNetworking с Google Places APIПочему AFNetworking получает неподдерживаемый URL при установке '|' знак трубы в url

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

Адреса рядом поиск апи использует type ограничение, чтобы ограничить результат, который вы можете получить от API. see document

способ, которым вы это делаете, должен иметь параметр types=type1|type2|type3|etc, тип1, type2, type3 - это типы мест, которые вы хотите получить с помощью URL. Мне удалось получить результаты, когда я вставляю URL-адрес в браузер и запрашиваю его. но всякий раз, когда я использую его с AFNetworking, знак '|', кажется, разбивает его. Он выдает ошибку unsupported url.

Есть ли причина в этом вопросе? Любое предложение было бы полезно.

Спасибо!

+0

, когда я заменяю '|' с '% 7C', закодированные версиями. он работает, похоже, что AFNetworking не кодирует '' 'самостоятельно? –

+0

Да, я сам создаю URL. Я попробую ваше предложение, может быть, лучшее решение. –

ответ

2

Вы строите этот URL самостоятельно? Если вы использовали параметры запроса 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); 
}]; 
+0

спасибо, Роб! Кстати, есть ли какая-либо рекомендуемая практика при использовании AFNetworking? –

+0

Я не уверен, что вы подразумеваете под предлагаемой лучшей практикой. Если вы пользуетесь 'AFHTTPRequestOperationManager' или' AFHTTPSessionManager', это довольно хороший старт. Аналогичным образом, использование его, как и выше, позволяет вам избавиться от особенностей создания URL-адресов и формирования запросов. – Rob

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"]; 
Смежные вопросы