Comment vérifier si une URL existe ou retourne 404 avec Java?

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");
}

Cela devrait afficher

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"));           

Sortie

200

200

200

404

SOLUTION

Ajoutez la ligne suivante avant .connect() et la sortie serait de 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)");
  • Je ne vois pas le problème dans votre test. Dans mon navigateur, je n'ai pas récupérer le contenu de la deuxième résultat, mais je n'obtiens une erreur 404
  • En fait, il semble que je reçois une grande partie vide de la page HTML
  • Ce site semble donner de contenu valable pour la plupart rien. par exemple www.nbc.com/junk. Essayer avec example.com/junk.html
  • L'URL nbc.com/Heroes/novels/downloads/Heroes_novel_190.pdf me donne une page vierge (pas encore <html> tag), mais avec une erreur 404 en-tête. Pas très agréable pour les utilisateurs, mais techniquement correcte.
  • Vous devriez avoir séparé de la solution dans une réponse afin que je puisse upvote que trop!.