Проблема, связанная с NSURLConnection - PullRequest
0 голосов
/ 28 сентября 2011

сегодня я столкнулся с проблемой NSURLConnection.Я хочу скачать содержимое URL http://api.wunderground.com/api/fs3a45dsa345/geolookup/q/34.532900,-122.345.json.Если я просто вставлю URL в Safari, я получу правильный ответ.Однако, если я делаю то же самое с NSURLConnection, я получаю ответ «не найден».Вот код, который я использую:

NSURL *requestURL = [[NSURL alloc] initWithString:@"same url as above"];
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:requestURL];
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest
                                                                 delegate:self
                                                         startImmediately:YES];

В чем здесь проблема?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Убедитесь, что вы экранировали любые специальные символы в строке URL, отправив ему сообщение stringByAddingPercentEscapesUsingEncoding:, например:

NSString *s = [@"some url string" stringByAddingPercentEscapesUsingEncoding:NSUTFStringEncoding];
NSURL *requestURL = [NSURL URLWithString:s];

EDIT

Оказывается, что запрос веб-службы не выполняется, поскольку заголовок User-Agent не установлен по умолчанию. Чтобы установить его, используйте экземпляр NSMutableURLRequest вместо NSURLRequest для создания запроса, как показано ниже:

NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myURL];
[myRequest setValue:@"My App" forHTTPHeaderField:@"User-Agent"];
0 голосов
/ 28 сентября 2011

Где находится код делегата? Для async NSURLConnection должен быть метод delegate для получения возвращенных данных. Другие варианты включают sendSynchronousRequest: или, если это должно быть асинхронное завершение sendSynchronousRequest в GCD block.

...