【发布时间】:2011-02-05 13:27:18
【问题描述】:
解决方案
好的,经过一番搜索,我在 Stackoverflow 上找到了 1 个解决方案,但我希望不用额外的库就可以做到。 How to check for a valid URL in Java?
我的问题:
首先希望这不是重复的,但我找不到正确的答案(马上)。我想验证 URI(http) 在 Java 中是否有效。我想出了以下测试,但我无法让它们通过。首先我使用getPort(),但随后http://www.google.nl 将在getPort() 上返回-1。这是我想通过的测试
测试:
@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 是否正确。至少在这一步还没有。我只想验证方案。
【问题讨论】:
-
'我不想连接到服务器来验证 URI 是否正确' 为什么不呢?这是唯一决定性的决定方式。
-
@EJP 不同意。 IETF 发布的RFC 3986 明确建立了严格的语法。要使 URI 有效,您只需根据此语法对其进行验证。连接到它会验证服务器是否已注册并侦听该 URI,其中 1. 是与 URI 本身的有效性完全不同的条件,2. 使您的测试依赖于外部资源,而 3. 可以说是特定于实现的。 HTTP 客户端可以以任意数量的非标准方式运行。
标签: java uri validation