У меня есть программа, которая извлекает список прогнозных ссылок с помощью веб-службы API weather.gov , а затем вызывает каждую ссылку, чтобы получить и сохранить данные о погоде для почтовых индексов, которые они могут просматриваться на нашей домашней странице в соответствии с настройками почтового индекса пользователя. В последнее время я вижу много ошибок 503 в нашем журнале ошибок, поэтому, когда я пошел проверить его и запустить несколько URL-адресов с помощью Postman, я получил следующий ответ:
{
"correlationId": "36eb9a42-990d-4ca8-a24a-cd0c67985903",
"title": "Forecast Grid Expired",
"type": "https://api.weather.gov/problems/ForecastGridExpired",
"status": 503,
"detail": "The requested forecast grid was issued 2020-02-11T02:50:40+00:00 and has expired.",
"instance": "https://api.weather.gov/requests/36eb9a42-990d-4ca8-a24a-cd0c67985903"
}
К сожалению Я не знаю, что это значит, когда истекает срок действия запрашиваемой сетки прогноза, и я не смог найти ничего в их документации для этого. Возможно, я что-то пропустил, или, возможно, у меня есть проблема в моем коде, которая вызывает эту проблему.
Это программа java, и она использует javax. net .ssl.HttpsURLConnection и java. net .URL:
URL url = new URL("https://api.weather.gov/gridpoints/BOX/21,35/forecast");
HttpsURLConnection httpsConn = (HttpsURLConnection)url.openConnection();
httpsConn.setRequestMethod(HttpMethod.GET);
httpsConn.setRequestProperty("Content-Type", "application/json");
httpsConn.setConnectTimeout((1000 * 60));
httpsConn.setReadTimeout((1000 * 60));
StringBuffer response = getApiResponse(httpsConn, 0);
private StringBuffer getApiResponse(HttpsURLConnection httpsConn, int counter){
StringBuffer response = new StringBuffer();
try{
BufferedReader in = new BufferedReader(new InputStreamReader(httpsConn.getInputStream()));
String inputLine;
while((inputLine = in.readLine()) != null){
response.append(inputLine);
}
in.close();
}catch(Exception e){
counter++;
errorLog.add("ERROR: " + e.getMessage());
errorLog.add("Number of attempted calls: " + counter);
if(counter < 5){
response = getApiResponse(httpsConn, counter);
}else{
errorLog.add("Max attempts made for this API Call.");
}
}
return response;
}
Я обернул вызов в функцию, которая будет пытаться сделать вызов 5 раз, как я заметил, когда создавал эту программу, иногда вызов просто отключается , URL-адрес, который я использовал, оказался одним из тех, с которыми у меня возникли проблемы, похоже, что где-то с BOX
вызывает ошибку выше 503.
Кто-нибудь еще сталкивался с такой проблемой - и как они это решили?