Lee la url de la cadena en algunas líneas del código java

Estoy tratando de encontrar el equivalente de Java a Groovy:

String content = "http://www.google.com".toURL().getText(); 

Quiero leer el contenido de una URL en una cadena. No quiero contaminar mi código con flujos almacenados en búfer y bucles para una tarea tan simple. Miré HttpClient de Apache pero tampoco veo una implementación de una o dos líneas.

Ahora que ha pasado un tiempo desde que se aceptó la respuesta original, hay un mejor enfoque:

 String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A").next(); 

Si desea una implementación un poco más completa, que no es una sola línea, haga esto:

 public static String readStringFromURL(String requestURL) throws IOException { try (Scanner scanner = new Scanner(new URL(requestURL).openStream(), StandardCharsets.UTF_8.toString())) { scanner.useDelimiter("\\A"); return scanner.hasNext() ? scanner.next() : ""; } } 

Esta respuesta se refiere a una versión anterior de Java. Es posible que desee ver la respuesta de Ccleve.


Esta es la forma tradicional de hacer esto:

 import java.net.*; import java.io.*; public class URLConnectionReader { public static String getText(String url) throws Exception { URL website = new URL(url); URLConnection connection = website.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream())); StringBuilder response = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) response.append(inputLine); in.close(); return response.toString(); } public static void main(String[] args) throws Exception { String content = URLConnectionReader.getText(args[0]); System.out.println(content); } } 

Como @extraneon ha sugerido, ioutils te permite hacer esto de una manera muy eloquent que todavía está en el espíritu de Java:

  InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { System.out.println( IOUtils.toString( in ) ); } finally { IOUtils.closeQuietly(in); } 

O simplemente use IOUtils.toString(URL url) o la variante que también acepta un parámetro de encoding.

Ahora que ha pasado más tiempo, he aquí una forma de hacerlo en Java 8:

 URLConnection conn = url.openConnection(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { pageText = reader.lines().collect(Collectors.joining("\n")); } 

Ejemplo adicional usando Guava:

 URL xmlData = ... String data = Resources.toString(xmlData, Charsets.UTF_8); 

Hay una forma aún mejor a partir de Java 9:

 URL u = new URL("http://www.example.com/"); try (InputStream in = u.openStream()) { return new String(in.readAllBytes(), StandardCharsets.UTF_8); } 

Al igual que el ejemplo groovy original, esto supone que el contenido está codificado en UTF-8. (Si necesita algo más inteligente que eso, necesita crear una URLConnection y usarla para descubrir la encoding).

Si tiene la stream de entrada (vea la respuesta de Joe) también considere ioutils.toString (inputstream).

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream )

Lo siguiente funciona con Java 7/8, URL seguras y muestra cómo agregar una cookie a su solicitud también. Tenga en cuenta que esto es principalmente una copia directa de esta otra gran respuesta en esta página , pero agregó el ejemplo de cookie y aclaración, ya que también funciona con URL seguras 😉

Si necesita conectarse a un servidor con un certificado no válido o un certificado autofirmado, arrojará errores de seguridad a menos que importe el certificado. Si necesita esta funcionalidad, puede considerar el enfoque detallado en esta respuesta a esta pregunta relacionada en StackOverflow.

Ejemplo

 String result = getUrlAsString("https://www.google.com"); System.out.println(result); 

salidas

 < !doctype html> 

Código

 import java.net.URL; import java.net.URLConnection; import java.io.BufferedReader; import java.io.InputStreamReader; public static String getUrlAsString(String url) { try { URL urlObj = new URL(url); URLConnection con = urlObj.openConnection(); con.setDoOutput(true); // we want the response con.setRequestProperty("Cookie", "myCookie=test123"); con.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); StringBuilder response = new StringBuilder(); String inputLine; String newLine = System.getProperty("line.separator"); while ((inputLine = in.readLine()) != null) { response.append(inputLine + newLine); } in.close(); return response.toString(); } catch (Exception e) { throw new RuntimeException(e); } }