- 需要:**检查URL是否有效(即返回状态代码-200)
- 问题:**我尝试了这些链接中提供的解决方案,但似乎不适用于http状态代码不是200的URL。程序执行在
connection.getResponseCode()
处挂起
- 问题:**我尝试了这些链接中提供的解决方案,但似乎不适用于http状态代码不是200的URL。程序执行在
浏览器开发者工具,显示工作URL和非工作URL的返回代码
- 验证码:**
方法1-
- 验证码:**
try {
URL u = new URL(url1); // url1 -> Works, url2 -> does not work
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode(); // Program hangs here for url2
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println("URL is working fine.");
} else {
System.out.println("URL returned a response code: " + responseCode);
}
} catch (Exception e) {
System.out.println("Error occurred while checking the URL: " + e.getMessage());
}
}
方法2(使用Apache Commons UrlValidator类)-
UrlValidator urlValidator = new UrlValidator();
System.out.println(urlValidator.isValid(url1)); // Working URL
System.out.println(urlValidator.isValid(url2)); // Invalid URL, but still shows valid
- 添加:**如果有人可以指出我可以改变什么,以确保getResponseCode()在URL不工作时返回状态代码,在这种情况下或任何其他替代方法将有所帮助。
2条答案
按热度按时间bybem2ql1#
你在这里谈论两件不同的事情:
1.对URL的请求是否会成功,并返回200响应代码。
来自Apache Commons的
UrlValidator
只会检查第一个,所以当你有一个注解// Invalid URL, but still shows valid
时,这是不正确的。URL实际上是有效的。当您发出请求时,响应代码不是200的事实不会使URL无效。500错误意味着处理请求的代码有一个bug,很可能抛出某种异常。在尝试发出请求之前,您可能应该检查URL是否与
UrlValidator
有效。这将帮助您避免在URL无效时发出请求。由于此验证是使用计算机的CPU计算的,因此它比发出注定会失败的网络请求快得多。但是,即使URL是有效的,您仍然需要发出请求并检查响应代码,就像您正在做的那样,以验证响应是否相关。
nwlls2ji2#
对于任何面临类似问题的人,我使用HTTPstatus API管理了一个解决方案。
connection.getResponseCode()
挂起无效的情况下,不知道为什么。如果有时间的话,也许一些Maven可以检查一下。不知道为什么我的问题被否决了,尽管遵循了指导方针,清楚地说明了问题是什么,所做的研究以及我寻求的具体帮助。