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!.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter
si vous ne voulez pas suivre la redirection (3XX)
Au lieu de faire un "GET", une "TÊTE" est tout ce dont vous avez besoin.
cela a fonctionné pour moi:
merci pour les suggestions ci-dessus.
Utilisation HttpUrlConnection en appelant
openConnection()
sur votre URL de l'objet.getResponseCode() vous donnera la réponse HTTP une fois que vous avez lu à partir de la connexion.
par exemple
(pas testé)
Il n'y a rien de mal avec votre code. C'est l'NBC.com en faisant des tours sur vous. Lorsque NBC.com décide que votre navigateur n'est pas capable d'afficher des PDF, il suffit d'envoyer une page web, peu importe ce que vous demandez, même si elle n'existe pas.
Vous avez besoin de le tromper en arrière en le racontant votre navigateur est capable, quelque chose comme,
Basé sur les réponses données et de l'information dans la question, c'est le code que vous devez utiliser:
Bien sûr testé et de travail.