我使用HttpURLConnection
来验证来自数据库的网址。有时使用某些URL我会得到一个例外,我认为它们是超时但实际上是可以达到的(没有400范围错误)。
增加超时似乎并不重要,我仍然会遇到异常。我是否可以在catch区域进行第二次检查以验证URL实际上是否错误?相关代码如下。它适用于99.9%的网址,它是.01%。
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.13) Gecko/2009073021 Firefox/3.0.13");
connection.connect () ;
int responseCode = connection.getResponseCode();
if (responseCode >= 401)
{
String prcMessage = "ERROR: URL " + url + " not found, response code was " + responseCode + "\r";
System.out.println(prcMessage);
VerifyUrl.writeToFile(prcMessage);
return (false);
}
}
catch (IOException exception)
{
String errorMessage = ("ERROR: URL " + url + " did not load in the given time of " + timeout + " milliseconds.");
System.out.println(errorMessage);
VerifyUrl.writeToFile(errorMessage);
return false;
}
答案 0 :(得分:2)
取决于您想要检查的内容。但我猜 Validating URL in Java 让你受到了保护。
你有两个可能性:
检查语法(“此网址是真实的网址还是刚制作的网页?”)
有大量文字描述了如何做到这一点。基本上搜索RFC 3986.我猜有人已经实现了这样的支票。
检查语义(“网址是否可用?”)
虽然有不同的工具可用于在java中发送http请求,但实际上没有更快的方法。您可以发送HEAD请求而不是GET,因为HEAD省略了HTTP正文,可能会导致更快的请求和更少的超时。