wake-up-neo.com

Wie kann man mit Java überprüfen, ob eine URL existiert oder 404 zurückgibt?

String urlString = "http://www.nbc.com/Heroes/novels/downloads/Heroes_novel_001.pdf";
URL url = new URL(urlString);
if(/* Url does not return 404 */) {
    System.out.println("exists");
} else {
    System.out.println("does not exists");
}
urlString = "http://www.nbc.com/Heroes/novels/downloads/Heroes_novel_190.pdf";
url = new URL(urlString);
if(/* Url does not return 404 */) {
    System.out.println("exists");
} else {
    System.out.println("does not exists");
}

Dies sollte drucken

exists
does not exists

TEST

public static String URL = "http://www.nbc.com/Heroes/novels/downloads/";

public static int getResponseCode(String urlString) throws MalformedURLException, IOException {
    URL u = new URL(urlString); 
    HttpURLConnection huc =  (HttpURLConnection)  u.openConnection(); 
    huc.setRequestMethod("GET"); 
    huc.connect(); 
    return huc.getResponseCode();
}

System.out.println(getResponseCode(URL + "Heroes_novel_001.pdf")); 
System.out.println(getResponseCode(URL + "Heroes_novel_190.pdf"));   
System.out.println(getResponseCode("http://www.example.com")); 
System.out.println(getResponseCode("http://www.example.com/junk"));           

Ausgabe

200
200
200
404

LÖSUNG

Fügen Sie die nächste Zeile vor .connect () hinzu und die Ausgabe wäre 200, 404, 200, 404

huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
72
Sergio del Amo

Vielleicht möchten Sie hinzufügen

HttpURLConnection.setFollowRedirects(false);
// note : or
//        huc.setInstanceFollowRedirects(false)

wenn Sie der Umleitung nicht folgen möchten (3XX)

Anstatt ein "GET" zu machen, ist ein "HEAD" alles was Sie brauchen.

huc.setRequestMethod("HEAD");
return (huc.getResponseCode() == HttpURLConnection.HTTP_OK);
56
RealHowTo

das hat bei mir geklappt:

URL u = new URL ( "http://www.example.com/");
HttpURLConnection huc =  ( HttpURLConnection )  u.openConnection (); 
huc.setRequestMethod ("GET");  //OR  huc.setRequestMethod ("HEAD"); 
huc.connect () ; 
int code = huc.getResponseCode() ;
System.out.println(code);

danke für die vorschläge oben.

39
mmm

Verwenden Sie HttpUrlConnection , indem Sie openConnection() für Ihr URL-Objekt aufrufen.

getResponseCode () gibt Ihnen die HTTP-Antwort, sobald Sie von der Verbindung gelesen haben.

z.B.

   URL u = new URL("http://www.example.com/"); 
   HttpURLConnection huc = (HttpURLConnection)u.openConnection(); 
   huc.setRequestMethod("GET"); 
   huc.connect() ; 
   OutputStream os = huc.getOutputStream(); 
   int code = huc.getResponseCode(); 

(nicht getestet)

23
Brian Agnew

Es ist nichts falsch mit Ihrem Code. Es ist die NBC.com, die Tricks an dir macht. Wenn NBC.com feststellt, dass Ihr Browser keine PDF-Dateien anzeigen kann, sendet er einfach eine Webseite zurück, unabhängig davon, was Sie anfordern, auch wenn diese nicht vorhanden ist.

Sie müssen es zurückschleichen, indem Sie sagen, dass Ihr Browser in der Lage ist, so etwas wie

conn.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");
12
ZZ Coder

Basierend auf den gegebenen Antworten und Informationen in der Frage ist dies der Code, den Sie verwenden sollten:

public static boolean doesURLExist(URL url) throws IOException
{
    // We want to check the current URL
    HttpURLConnection.setFollowRedirects(false);

    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

    // We don't need to get data
    httpURLConnection.setRequestMethod("HEAD");

    // Some websites don't like programmatic access so pretend to be a browser
    httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
    int responseCode = httpURLConnection.getResponseCode();

    // We only accept response code 200
    return responseCode == HttpURLConnection.HTTP_OK;
}

Natürlich getestet und funktioniert.

7
BullyWiiPlaza