Как проверить данное доменное имя http или https в java?

Моя проблема

В моем приложении Android я получаю URL-адрес от пользователя, например "www.google.com".

Я хочу узнать для данного URL-адреса, следует ли использовать http или https.

Что я пробовал

после обращения к некоторым вопросам, которые я пробовал с помощью getScheme()

try {
    String url_name="www.google.com";
    URI MyUri = new URI(url_name);
    String http_or_https="";
    http_or_https=MyUri.getScheme();
    url_name=http_or_https+"://"+urlname;
    Log.d("URLNAME",url_name);
}
catch (Exception e) {
    e.printStackTrace();
}

Но мой выше код генерирует исключение.

Мой вопрос

Является ли выше подход getScheme() правильным или нет?

Если вышеприведенный подход неверен, как найти URL-адрес http или https?

Ответы

Ответ 1

Доменное имя является доменным именем, оно не имеет ничего общего с протоколом. Домен - это ГДЕ, протокол - это КАК.

Домен - это место, куда вы хотите отправиться, протокол - это как вы едете туда, на автобусе, самолетом, поездом или на лодке. Нет смысла спрашивать: "Я хочу пойти в магазин, как я могу спросить в магазине, должен ли я ехать поездом или на машине?"

Причина, по которой это работает в браузерах, заключается в том, что браузер обычно пытается подключиться с использованием как http, так и https, если не предоставляется протокол.

Если вы знаете URL-адрес, сделайте следующее:

    public void decideProtocol(URL url) throws IOException {
            if ("https".equals(url.getProtocol())) { 
                // It is https
            } else if ("http".equals(url.getProtocol())) {
                // It is http
            }
    }

Ответ 2

Вы можете использовать Apache UrlValidator.

Вы можете указать допустимую схему URL-адреса, и в вашем случае код выглядит примерно так:

String[] schema = {"https"};
UrlValidator urlValidator = new UrlValidator(schemes);

if (urlValidator.isValid("http://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

if (urlValidator.isValid("https://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

Ответ 3

Вы можете проверить, что данный URL-адрес - http или https, используя URLUtils.

URLUtil.isHttpUrl(String url); возвращает значение True, если URL-адрес является http.

URLUtil.isHttpsUrl(String url); возвращает значение True, если URL-адрес https.

Ответ 4

Иерархический URI подвергается дальнейшему анализу в соответствии с синтаксисом [Схема:] [? Запрос] [//власть] [путь] [# фрагмент]

поэтому ваше url_name не имеет схемы. если url_name " https://www.google.com", поэтому схема https.

: http://docs.oracle.com/javase/7/docs/api/java/net/URI.html

Ответ 5

Как указывалось, если пользователь не посмел предоставить полный URL-адрес, включая тип протокола. Приложение может использовать вид проб и ошибок, попробуйте установить соединение, используя список доступных протоколов. (http, https). Успешный удар можно считать дефолтом. Опять же, все это об удобстве использования, этот метод лучше, чем просто раздражать невнимательного пользователя с уродливым сообщением об ошибке.

Ответ 6

Вы не можете получить его только из URL. Это не имеет смысла. Некоторые веб-сайты могут работать как с http, так и с https. Это зависит от самого веб-сайта, используют ли они сертификат SSL или нет.

Ответ 7

ranjith- я буду хранить какое-то сопоставление между URI (основным доменом) и предпочтительным protcol в приложении. Возможно, у вас есть предопределенные сопоставления на основе того, что вы знаете, а затем пусть это отображение растет по мере добавления большего количества Uris.