проверьте тот URI, допустимый http URI

Решение

Хорошо я нашел 1 решение на Stackoverflow после немного большего количества поиска, но я надеюсь сделать это без дополнительных библиотек. Как проверить на допустимый URL в Java?

Моя проблема:

Сначала, надо надеяться, это не дубликат, но я не мог найти правильный ответ (сразу же). Я хотел бы проверить это, URI (http) допустим в Java. Я придумал следующие тесты, но я не могу заставить их передавать. Сначала я использовал getPort(), но затем http://www.google.nl возвратится-1 на getPort(). Это - тест, который я хочу пройти

Тест:

@Test
public void testURI_Isvalid() throws Exception {
    assertFalse(HttpUtils.validateHTTP_URI("ttp://localhost:8080"));
    assertFalse(HttpUtils.validateHTTP_URI("ftp://localhost:8080"));
    assertFalse(HttpUtils.validateHTTP_URI("http://localhost:8a80"));
    assertTrue(HttpUtils.validateHTTP_URI("http://localhost:8080"));
    final String justWrong = 
        "/schedule/get?uri=http://localhost:8080&time=1000000";
    assertFalse(HttpUtils.validateHTTP_URI(justWrong));
    assertTrue(HttpUtils.validateHTTP_URI("http://www.google.nl"));
}

Это - то, что я придумал после того, как я удалил getPort() часть, но это не передает все мои модульные тесты.

Производственный код:

  public static boolean validateHTTP_URI(String uri) {
        final URI u;
        try {
            u = URI.create(uri);
        } catch (Exception e1) {
            return false;
        }
        return "http".equals(u.getScheme());
  }

Это - первый тест, который перестал работать, потому что я больше не проверяю getPort () часть. Надо надеяться, кто-то может выручить меня. Я думаю, что не использую правильный класс для проверки URL?

P.S.:

Я не хочу соединяться с сервером для проверки URI, корректно. По крайней мере еще на этом шаге. Я только хочу проверить схему.

12
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

Код, который ПРОЙДЕТ

public static boolean validateHTTP_URI(String uri) {
    final URL url;
    try {
        url = new URL(uri);
    } catch (Exception e1) {
        return false;
    }
    return "http".equals(url.getProtocol());
}

Мой следующий вопрос:

Я слышал / читал (Джошуа Блох) где-то, что URL-адрес не работает должным образом, если у вас нет Интернета (больше). Но я не думаю, что это правда (больше)? Не мог бы кто-нибудь уточнить.

8
ответ дан 2 December 2019 в 23:19
поделиться

Вы можете попробовать использовать это регулярное выражение:

(?:(?<protocol>http(?:s?)|ftp)(?:\:\/\/)) (?:(?<usrpwd>\w+\:\w+)(?:\@))? (?<domain>[^/\r\n\:]+)? (?<port>\:\d+)? (?<path>(?:\/.*)*\/)? (?<filename>.*?\.(?<ext>\w{2,4}))? (?<qrystr>\??(?:\w+\=[^\#]+)(?:\&?\w+\=\w+)*)* (?<bkmrk>\#.*)?

Это покажет вам, является ли URL действительным, и даст вам значение протокола. Я не знаю Java, поэтому не знаю, какой класс нужно использовать для проверки регулярных выражений.

-2
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: