验证 URI 是否有效 http URI

2022-09-04 22:48:17

溶液

好吧,经过更多的搜索,我在Stackoverflow上找到了1个解决方案,但我希望在没有额外库的情况下做到这一点。如何在Java中检查有效的URL?

我的问题:

首先希望这不是重复的,但我无法找到正确的答案(马上)。我想验证URI(http)在Java中是否有效。我想出了以下测试,但我无法让他们通过。首先我使用,但随后将返回 -1 on 。这是我想通过的测试getPort()http://www.google.nlgetPort()

测试:

@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?

附言:

我不想连接到服务器来验证 URI 是否正确。至少还没有在此步骤中。我只想验证方案。


答案 1

将传递的代码

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将无法正常工作。但我不认为这是真的(不再)?有人可以详细说明一下吗?


答案 2

您可以尝试使用此正则表达式:

(?:(?<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,所以我不知道你需要用什么类来验证正则表达式。protocol


推荐