#java #exception-handling #get
#java #исключение #получить
Вопрос:
Я пытаюсь отправить запрос GET на веб-сайт следующим образом:
uRL = new URL(URLString);
connection = (HttpURLConnection) uRL.openConnection();
// optional default is GET
connection.setRequestMethod("GET");
// add request header
connection.setRequestProperty("User-Agent", USER_AGENT);
responseCode = connection.getResponseCode();
Однако мне нужно обрабатывать исключения. Например, если генерируется исключение, я попытаюсь запросить снова. Как я могу это сделать?
Ответ №1:
вы можете использовать while
с try-catch
so, если exception
произойдет переход к следующей итерации, в противном break
случае loop
int attempts=5;
boolean flag=false;
while(attempts-- > 0){
try{
uRL = new URL(URLString);
connection = (HttpURLConnection) uRL.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", USER_AGENT);
responseCode = connection.getResponseCode();
flag=ture;
break;
}catch(Exception e){
e.printStackTrace();
continue;
}
}
if(flag){
// mean request executed successfully
// don't throw exception, unless you want to break the current flow of execution
}
Чтобы ограничить попытки, просто используйте переменную count(попытка) и переменную flag для проверки успешного выполнения
Комментарии:
1. флаг должен быть true в цикле while вместо ture
Ответ №2:
Идея состоит в том, чтобы поместить его в for
цикл с заданным количеством возможных попыток, чтобы предотвратить бесконечный цикл, затем в любое время, когда возникает исключение, вы перехватываете его и регистрируете, а затем можете повторить попытку. Если это не удалось сделать после фиксированного количества попыток, вы можете создать исключение.
boolean success = false;
for (int i = 1; !success amp;amp; i <= maxTries; i ) {
try {
uRL = new URL(URLString);
connection = (HttpURLConnection) uRL.openConnection();
// optional default is GET
connection.setRequestMethod("GET");
// add request header
connection.setRequestProperty("User-Agent", USER_AGENT);
responseCode = connection.getResponseCode();
success = true;
} catch (Exception e) {
logger.log(Level.SEVERE, "Could not access to the server due to {}, try {}/{}",
new Object[]{e.getMessage(), i, maxTries}
);
}
}
if (!success) {
throw new IllegalStateException("Could not access to the server");
}