我需要检查一个设置的Intranet站点。我试着使用下面的代码。 (刚刚在互联网上通过随机搜索获得此代码)。我在我的动作类上调用了这个方法。但大多数进入异常部分的网站。我正在获取协议异常和UnknownHostException
,即使我能够从浏览器中打开这些网站。
参考代码:
public boolean isLive(String link) {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(link);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("HEAD");
urlConnection.setConnectTimeout(5000); /* timeout after 5s if can't connect */
urlConnection.setReadTimeout(5000); /* timeout after 5s if the page is too slow */
urlConnection.connect();
String redirectLink = urlConnection.getHeaderField("Location");
if (redirectLink != null && !link.equals(redirectLink)) {
return isLive(redirectLink);
} else {
return urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK;
}
} catch (Exception e) {
return false;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
答案 0 :(得分:0)
我觉得代码没问题。 您的连接超时为5秒
urlConnection.setConnectTimeout(5000)
任何超过5秒的查询都将被视为死链接。您的浏览器的超时时间比代码长得多,因此您可以在浏览器中浏览这些网站
答案 1 :(得分:0)
如果您收到协议异常和未知主机异常,我们需要了解更多以便提供帮助。您的机器是否配置为通过代理?您是否拥有应用容器用户无法共享的主机定义?
另外,考虑使用像HttpClient之类的东西来包装这样的东西,而不是手动完成;太多的工作。