проверить, что URI является действительным http URI - PullRequest
12 голосов
/ 08 апреля 2010

Решение

Хорошо, после небольшого поиска я нашел 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. По крайней мере, пока на этом этапе. Я только хочу проверить схему.

Ответы [ 2 ]

8 голосов
/ 08 апреля 2010

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

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 не работает должным образом, если у вас нет интернета (больше). Но я не думаю, что это правда (больше)? Может кто-нибудь, пожалуйста, уточните.

0 голосов
/ 20 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...