验证URI是否是有效的http URI

Alf*_*red 12 java validation uri

好吧,经过一番搜索,我在Stackoverflow上找到了1个解决方案,但我希望没有额外的库.如何在Java中检查有效的URL?

我的问题:

首先,希望这不是重复,但我找不到正确的答案(马上).我想验证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"));
}
Run Code Online (Sandbox Code Playgroud)

这是我删除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());
  }
Run Code Online (Sandbox Code Playgroud)

这是第一个失败的测试,因为我不再验证getPort()部分.希望有人可以帮助我.我想我没有使用正确的类来验证URL?

PS:

我不想连接到服务器来验证URI是否正确.至少还没有在这一步.我只想验证方案.

Alf*_*red 8

将通过的代码

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());
}
Run Code Online (Sandbox Code Playgroud)

我的下一个问题是:

我听到/读过(Joshua Bloch,我相信)如果你没有互联网(不再),Url无法正常工作.但我不认为这是真的(不再)了吗?请有人详细说明.

  • URL涉及DNS.URI没有. (3认同)