Я пытаюсь использовать следующие конечные точки HTTPS из службы погоды Yahoo:
Я делаю специальный запрос в соответствии с API, чтобы получить текущую погоду в каком-то параметризованном месте.
@Service("weatherConditionService")
public class WeatherConditionServiceImpl implements WeatherConditionService {
private static final String URL = "http://query.yahooapis.com/v1/public/yql";
public WeatherCondition getCurrentWeatherConditionsFor(Location location) {
RestTemplate restTemplate = new RestTemplate();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(URL);
stringBuilder.append("?q=select%20item.condition%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22");
// TODO: Validate YQL query injection
stringBuilder.append(location.getName());
stringBuilder.append("%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys");
WeatherQuery weatherQuery = restTemplate.getForObject(stringBuilder.toString(), WeatherQuery.class);
// TODO: Test Json mapping response
Condition condition = weatherQuery.getQuery().getResults().getChannel().getItem().getCondition();
return new WeatherCondition(condition.getDate(), Integer.parseInt(condition.getTemp()), condition.getText());
}
Местоположение — это класс, предоставляющий атрибут «имя», представляющий собой строковое описание местоположения, например «Нью-Йорк» или «Манила».
Условие других классов просто отображает возвращаемый объект.
При выполнении я получаю следующий HTTP-ответ:
org.springframework.web.client.HttpClientErrorException: 403 Forbidden
Итак, это означает, что я не авторизован для доступа к ресурсу, насколько я понимаю.
URL-адрес отлично работает, если я просто скопирую и вставлю его в веб-браузере:
Я думаю, что сопоставление не является проблемой, поскольку я получаю не «400» (неверный запрос), а «403» (запрещено)
Должна быть какая-то ошибка в том, как я использую объект RestTemplate. Я исследую, но я не могу найти ответ.