Tengo una aplicación Java Spark que recupera datos de un sitio web de la siguiente manera:
while(true) { try{ connection = (HttpURLConnection) uRL.openConnection(); /* optional default is GET */ connection.setRequestMethod("GET"); /* add request header */ connection.setRequestProperty("User-Agent", USER_AGENT); connection.getResponseCode(); connection.setReadTimeout(0); /* Read the response code */ bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); break; } catch(Exception e){ LOGGER.error("Error in querying Wikipedia: "+e.getMessage()); continue; } } response = new StringBuffer(); while ((inputLine = bufferedReader.readLine()) != null) { response.append(inputLine); response.append("\n"); } bufferedReader.close();Este código funciona bien en Windows.
Sin embargo, en una máquina Centos que tiene un servidor proxy HTTP y HTTPs, falla con Tiempo de espera de conexión. Establecí las propiedades del sistema para el proxy HTTPs para la aplicación y me aseguré de que funcione para algunos enlaces. Sin embargo, no funciona para algunos otros. Para aquellos que no funcionan, también probé la misma URL usando wget en el servidor Linux y funcionó.
Enlace que no funciona: https://ar.wikipedia.org/w/api.php?action=query&format=xml&titles=%D9%82%D8%B1%D9%89&redirects&prop=pageprops|categories&cllimit=500
enlace que funciona: https://ar.wikipedia.org/w/api.php?action=query&format=xml&list=allpages&apnamespace=14&apfilterredir=nonredirects&aplimit=500
Java no respeta necesariamente la configuración de proxy predeterminada de su sistema. Dado que puede "curvar" la URL en la máquina Linux, la explicación más probable es que Java no está utilizando el proxy que configuró. Los siguientes enlaces explican varias formas de configurar los proxies para Java:
Estoy usando Ubuntu y funcionó conmigo
try { URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); //add request header int responseCode = con.getResponseCode(); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }