0

Я работаю с AFNetworking 3.0 и CLLocation для приложения погоды.AFNetworking с CLLocation дает ошибку

Когда я нажимаю на кнопку, API должен обновляться с указанием местоположения. Но это дает мне ошибку после обновления местоположения.

Я использую погоду в мире api для получения данных о погоде.

Ошибкаесть,

Ошибка Домен = com.alamofire.error.serialization.response код = -1011 "Не удалось выполнить запрос: запрещен (403)" UserInfo = {com.alamofire. serialization.response.error.response = {URL: http://api.worldweatheronline.com/free/v1/weather.ashx?format=json&key=1b8c4f157aec499cba0120254161609&num_of_days=5&q=19.017615%2C72.856164} {код состояния: 403, заголовки { "Access-Control-Allow-Origin" = "*"; Возраст = 0; "Cache-Control" = "public, max-age = 120"; Connection = "keep-alive"; "Content-Encoding" = gzip; "Content-Length" = 96; "Content-Type" = "application/json; charset = utf-8"; Дата = "Пн, 19 сен 2016 05:53:12 GMT"; Истекает = "Пн, 19 сен 2016 05:55:13 GMT"; Vary = "Accept-Encoding"; Via = WebCelerate; "X-Cache" = MISS; "X-Powered-By" = "ASP.NET"; "X-Webcelerate" = "WebCelerate - www.ukfast.co.uk/web-acceleration.html"; "X-node" = "zfdl_api_01"; "access-control-allow-headers" = "content-type"; }}, NSErrorFailingURLKey = http://api.worldweatheronline.com/free/v1/weather.ashx?format=json&key=1b8c4f157aec499cba0120254161609&num_of_days=5&q=19.017615%2C72.856164, com.alamofire.serialization.response.error.data = < 7b202264 61746122 22657272 3a207b20 6f72223a 205b207b 226d7367 223a2022 41504920 6b657920 646f6573 206e6f74 20686176 65206163 63657373 74686520 20746f20 7265736f 75726365 2e22207d 205d207d 7d>, NSLocalizedDescription = Запрос не выполнен: запрещено (403)}

Я ссылаюсь на все статьи в сети, но не могу найти правильный ответ для этого.

У меня есть несколько методов для выполнения этой функции,

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{NSLog(@"location updated"); 
    // Last object contains the most recent location 
    CLLocation *newLocation = [locations lastObject]; 

    // If the location is more than 5 minutes old, ignore it 
    if([newLocation.timestamp timeIntervalSinceNow] > 300) 
     return; 

    [self.locationManager stopUpdatingLocation]; 

    WeatherHTTPClient *client = [WeatherHTTPClient sharedWeatherHTTPClient]; 
    client.delegate = self; 
    [client updateWeatherAtLocation:newLocation forNumberOfDays:5]; 
} 

- (void)weatherHTTPClient:(WeatherHTTPClient *)client didUpdateWithWeather:(id)weather 
{ 
    self.weather = weather; 
    self.title = @"API Updated"; 
    [self.tableView reloadData]; 
    NSLog(@"API updated"); 
} 

- (void)weatherHTTPClient:(WeatherHTTPClient *)client didFailWithError:(NSError *)error 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather" 
                 message:[NSString stringWithFormat:@"%@",error] 
                 delegate:nil 
               cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    NSLog(@"error - %@", error); 
} 

Этот метод называют, когда я постучала кнопку с именем API. Обновляйте местоположения и дайте данные в виде таблицы. Но это не работает.

метод Баттон:

- (IBAction)apiTapped:(id)sender 
{ 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate=self; 
    self.locationManager.desiredAccuracy=kCLLocationAccuracyBest; 
    self.locationManager.distanceFilter=kCLDistanceFilterNone; 
    [self.locationManager requestWhenInUseAuthorization]; 
    [self.locationManager startMonitoringSignificantLocationChanges]; 
    [self.locationManager startUpdatingLocation]; 
    NSLog(@"apiTapped"); 
} 

Я ссылаюсь этот учебник для AFNetworking демо,

https://www.raywenderlich.com/59255/afnetworking-2-0-tutorial

Согласно этому учебник все работает нормально для них в AFNetworking 2.0, но не образуют меня ,

Так в чем проблема в моем коде?

+0

Если ваш сервер сертифицирован ssl, используйте https вместо http. –

ответ

1

Я решил проблему.

Проблема с доступом. У меня есть учетная запись в погоде в мире с бесплатным пользователем. и апите гиперссылка есть

http://api.worldweatheronline.com/free/v1/

Так с бесплатным АСоипом они не обеспечивают некоторый доступ к их API.

Я изменил URL к,

http://api.worldweatheronline.com/premium/v1/

Так что теперь они разрешают доступ к API, а ошибка в настоящее время нет.

1

Ваш клиент получил HTTP Error 403 Forbidden, что означает

Запрос был действителен запрос, а сервер отказывается отвечать на него. Пользователь может войти в систему, но не имеет необходимых разрешений для ресурса.

Проверьте, пожалуйста, статус авторизации. Для получения дополнительной информации просмотрите ссылку https://en.wikipedia.org/wiki/HTTP_403

Смежные вопросы