Social Icons

.

четверг, 23 января 2014 г.

HttpURLConnection: как отличить Timeout от других ошибок

Методы HttpURLConnection при невозможности соединиться с сервером бросают IOException, в котором текстом указана причина невозможности выполнения метода. Однако HttpURLConnection создан на обычных сокетах, исключения от которых так же можно ловить, хотя они и не описаны в документации на методы HttpURLConnection.


try {
   HttpURLConnection.setFollowRedirects(false);
   HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
   con.setRequestMethod("HEAD");

   con.setConnectTimeout(5000); //set timeout to 5 seconds
   con.setReadTimeout(10000); //set timeout to 10 seconds

   return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
} catch (java.net.SocketTimeoutException e) {
   return false;
} catch (java.io.IOException e) {
   return false;
}

Соответсвенно, при срабатывании любого из Timeout-ов, мы будем получать исключение java.net.SocketTimeoutException. Сообщение в исключениях будет различаться. Это будет либо "connect timed out", либо "read timed out".

Оригинал 

Комментариев нет:

Отправить комментарий

 

Так говорил Учитель:

У хорошо написанной программы есть свой собственный рай, у плохо написанной — свой собственный ад.

Russian Developer

Взгляд его светел, усилия праведны, старания бесплодны, дело безнадежно ...