the resource requested not found error java url http-status-code-404

resource - ¿Cómo verificar si existe una URL o devuelve 404 con Java?



http error 404 the requested resource is not found localhost (5)

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

Esto debería imprimir

exists does not exists

PRUEBA

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

Salida

200
200
200
404

SOLUCIÓN

Agregue la siguiente línea antes de .connect () y la salida sería 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)");


Basado en las respuestas dadas y la información en la pregunta, este es el código que debe usar:

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

Por supuesto probado y funcionando.


Es posible que desee agregar

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

si no quieres seguir la redirección (3XX)

En lugar de hacer un "GET", una "HEAD" es todo lo que necesita.

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


No hay nada malo con tu código. Es el NBC.com haciendo trucos contigo. Cuando NBC.com decide que su navegador no es capaz de mostrar PDF, simplemente envía de vuelta una página web independientemente de lo que está solicitando, incluso si no existe.

Tienes que engañarlo diciéndole que tu navegador es capaz, algo así como,

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


Use HttpUrlConnection llamando a openConnection() en su objeto URL.

getResponseCode() le dará la respuesta HTTP una vez que haya leído de la conexión.

p.ej

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

(no probado)


esto funcionó para mí:

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

gracias por las sugerencias anteriores.