webForumDet fria alternativet

URL-Check

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

Jörgen HPMedlem sedan feb. 20012 179 inlägg
#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

JaarMedlem 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.

Jörgen HPMedlem sedan feb. 20012 179 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

ViktorMedlem sedan aug. 20021 710 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

JaarMedlem 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

JaarMedlem 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

ViktorMedlem sedan aug. 20021 710 inlägg
#7

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

/Viktor

sgtpepperMedlem sedan apr. 20005 524 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.

Jörgen HPMedlem sedan feb. 20012 179 inlägg
#9

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

Ska trixa och testa ditt exempel sgtpepper! :)

mvh Jörgen HP

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb