Проверка установленного интернет-соединения не так проста, как отправка одного HTTP-запроса на произвольный URL, как предлагает Иван де ла Белдад. Это может привести к сбою по ряду причин, ни одна из которых не остановит вас от того, что вы на самом деле намереваетесь сделать с подключением. Чтобы назвать несколько:
- clients3.google.com может быть намеренно заблокирован локальной сетью (брандмауэр, корпоративный или школьный прокси-сервер) или любой сетью на маршруте (например, Great Firewall of China)
- clients3.google.com может быть недоступен для некоторых клиентов из-за перебоев в работе сети
- clients3.google.com сам может заблокировать клиента по любой причине (возможно, непреднамеренно)
- clients3.google.com может быть отключен
- порты 80 и 443 могут работать нормально, но все остальные порты заблокированы дерьмовым отелем / кафе wifi
- Дерьмовый Wi-Fi отеля / кафе предоставляет поддельные сертификаты TLS клиентам, поэтому во многих случаях запросы HTTPS не будут выполняться
Таким образом, вместо того, чтобы полагаться на один произвольный HTTP-запрос, гораздо лучше отправлять какие-либо проверки жизнеспособности любым службам, которые вы действительно хотите использовать.
Если ваше приложение хочет взаимодействовать с API, проверьте, есть ли конечная точка состояния или состояния, которую вы можете вызвать. Если нет, ищите какой-нибудь дешевый неоператор. И постарайтесь не говорить пользователям просто «проверить их интернет-соединение». Постарайтесь хотя бы объяснить, почему ваше приложение приходит к выводу, что может возникнуть проблема: «Мы не можем подключиться к Twitter прямо сейчас. Если вы подключены к Интернету, попробуйте еще раз через несколько минут» - это намного лучше.
Если вы действительно хотите проверить, доступен ли сам Интернет, я бы предложил сделать DNS-запрос к нескольким DNS-серверам в Интернете. DNS вряд ли будет заблокирован с помощью локальных политик и дешевле, чем HTTP-запросы. Мудро выбирайте DNS-запросы и будьте готовы к ответам NXDOMAIN.