webForumDet fria alternativet

URL-Check

Java

8 svar · 412 visningar · startad av Jörgen HP

Medlem sedan feb. 20012 412 inlägg
Frågan#1

Hej!

Donar med ett länkarkiv. Finns det något användbart i Javas Klassbibliotek som man kan kontrollera så att en URL leder någon vart? Brustna länkar är ju ingen höjdare, och det börjar bli jobbigt att kolla dem manuellt när länkarna börjar komma upp i ett par tusen stycken.

mvh Jörgen HP

Medlem sedan juli 2001434 inlägg
#2

Det ända du kan göra är att göra ett externt program som hämtar alla länkar (antar att de ligger i en databas) och testar och öppnar dem (URL class kombinerat med lite internet saker antar jag). Om den får ett 404:file-not-found svar i headern så kan du flytta den till en annan tabell så kan du kontrollera alla sedan manuellt...

Jag har inte gjort något liknande, men jag antar att du får göra en "web-browser" i miniformat.

Medlem sedan feb. 20012 412 inlägg
#3

Hmmm, det låter lite overkill. :OO

Får fundera ut något annat tror jag, tack ändå!

mvh Jörgen HP

Medlem sedan aug. 20021 752 inlägg
#4

Det här borde väll fungera, har dock inte provat själv :)

KODEN FUNGERAR EJ!
public boolean checkURL(String u)
{
   URL url=new URL(u);
   try
   {
      url.openConnection();
   }
   catch(IOException e)
   {
      return(false);
   }
   return(true);
}

/Viktor

Medlem sedan juli 2001434 inlägg
#5

Men kolla URL klassen. Tror du kan kolla headern där.

Url myUrl = new Url("http://www.webforum.nu");

if(myUrl.getHeader().getCode().equals("404"))
{
  //Fel, flytta på det
}
else
{
  //Rätt
}

Detta kommer dock leda till att om en server inte hittas kommer den kanske vara kvar.

Detta blir ju en liten minibrowser eftersom det kommer skickas ett HTTP GET kommando till sidan och hela sidan kommer hämtas. Att öppna sidan som en FileStream eller liknande fungerar då inte.

OBS!!! Koden ovan fungerar inte, men om du kollar javadocen så kan finns det nog funktioner som gör liknande saker

Medlem sedan juli 2001434 inlägg
#6

Viktor. Du kommer få ett svar på en 404 sida också... måste kolla headern, men det är rätt tänkt annars tror jag

Medlem sedan aug. 20021 752 inlägg
#7

Japp, det har du så rätt i :r
Får väll hoppas att hela servern är nere då ;)

/Viktor

Medlem sedan apr. 20007 588 inlägg
#8

Så här skulle man kunna göra:

import java.net.HttpURLConnection;
import java.net.URL;

public class LinkChecker {

	public boolean checkLink(String linkUrl) {
		try {
			URL url = new URL(linkUrl);
			HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
			return (urlConn.getResponseCode() != HttpURLConnection.HTTP_NOT_FOUND);
		} catch(Exception e) { 
			return false;
		}
	}
	
	public static void main(String args[]) {
		LinkChecker foo = new LinkChecker();
		System.out.println(foo.checkLink("http://www.google.com/nothing.html"));
	}

}

Denna funktion returnerar dock alltid true så länge webbservern svarar med någon annan returkod än 404 (HTTP_NOT_FOUND) och inget undantag slängts. Vissa sajter (t.ex webforum) svarar t.ex 302 (HTTP_MOVED_TEMP) och visar en felsida, så detta bör man också räkna som en felaktig länk.

Andra statuskoder som t.ex 500 (HTTP_INTERNAL_ERROR) vill man kanske också räkna som en trasig länk, men det beror på omständigheterna, det kan ju vara ett tillfälligt fel.

Medlem sedan feb. 20012 412 inlägg
#9

Ahhh, bugar och bockar för Era förslag!

Ska trixa och testa ditt exempel sgtpepper! :)

mvh Jörgen HP

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
114 ms — ändringar (db)