Как проверить данное доменное имя 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.