Я пытаюсь найти все неработающие ссылки на веб-странице, используя Java. Вот код:
private static boolean isLive(String link){
HttpURLConnection urlconn = null;
int res = -1;
String msg = null;
try{
URL url = new URL(link);
urlconn = (HttpURLConnection)url.openConnection();
urlconn.setConnectTimeout(10000);
urlconn.setRequestMethod("GET");
urlconn.connect();
String redirlink = urlconn.getHeaderField("Location");
System.out.println(urlconn.getHeaderFields());
if(redirlink != null && !url.toExternalForm().equals(redirlink))
return isLive(redirlink);
else
return urlconn.getResponseCode()==HttpURLConnection.HTTP_OK;
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}finally{
if(urlconn != null)
urlconn.disconnect();
}
}
public static void main(String[] s){
String link = "http://www.somefakesite.net";
System.out.println(isLive(link));
}
Код от http://nscraps.com/Java/146-program-code-broken-link-checker.htm.
Этот код дает статус HTTP 200 для всех веб-страниц, включая сломанные. Например
http://www.somefakesite.net/ дает следующие поля заголовка:
{null = [HTTP / 1.1 200 OK], Дата = [Вс, 15 мая 2011 г. 18:51:29 GMT], Transfer-Encoding = [chunked], Keep-Alive = [timeout = 4, max = 100 ], Connection = [Keep-Alive], Content-Type = [text / html], Server = [Apache / 2.2.15 (Win32) PHP / 5.2.12], X-Powered-By = [PHP / 5.2.9 -1]}
Даже если таких сайтов не существует, как их классифицировать как неработающую ссылку?