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 secuencias y bucles almacenados en búfer para una tarea tan simple. Miré en HttpClient de apache pero tampoco veo una implementación de una o dos líneas.
Respuestas:
Ahora que ha pasado un tiempo desde que se aceptó la respuesta original, hay un mejor enfoque:
Si desea una implementación un poco más completa, que no es una sola línea, haga lo siguiente:
fuente
Scanner#close()
más tarde.String result = scanner.hasNext() ? scanner.next() : "";
manejar eso.Esta respuesta se refiere a una versión anterior de Java. Es posible que desee ver la respuesta de ccleve.
Aquí está la forma tradicional de hacer esto:
Como @extraneon ha sugerido, ioutils le permite hacer esto de una manera muy elocuente que todavía está en el espíritu de Java:
fuente
getText
, pasar la cadena de URL como parámetro y tener una frase:String content = URLConnectionReader.getText("http://www.yahoo.com/");
O simplemente use Apache Commons
IOUtils.toString(URL url)
, o la variante que también acepta un parámetro de codificación.fuente
IOUtils.toString(URL)
está en desuso.IOUtils.toString(URL url, String encoding)
se prefiere.IOUtils.toString(url, (Charset) null)
para alcanzar un resultado similar.Ahora que ha pasado más tiempo, aquí hay una manera de hacerlo en Java 8:
fuente
http://www.worldcat.org/webservices/catalog/search/opensearch
web, obtengo solo las dos primeras líneas de xml.Hay una forma aún mejor a partir de Java 9:
Al igual que el maravilloso ejemplo original, esto supone que el contenido está codificado en UTF-8. (Si necesita algo más inteligente que eso, debe crear una conexión URLC y usarla para descubrir la codificación).
fuente
getClass().getResourceAsStream(...)
para abrir archivos de texto dentro del jar.Ejemplo adicional usando guayaba:
fuente
Si tiene la secuencia de entrada (vea la respuesta de Joe) también considere ioutils.toString (secuencia de entrada).
http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream )
fuente
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 esta es principalmente una copia directa de esta otra gran respuesta en esta página , pero agregó el ejemplo de la cookie y una aclaración en el sentido de que también funciona con URL seguras ;-)
Si necesita conectarse a un servidor con un certificado no válido o un certificado autofirmado, esto 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
salidas
Código
fuente
Aquí está la encantadora respuesta de Jeanne, pero envuelta en una función ordenada para muppets como yo:
fuente
URL a cadena en Java puro
Llamada de ejemplo
Implementación
Puede usar el método descrito en esta respuesta, en Cómo leer URL en un InputStream y combinarlo con esta respuesta en Cómo leer InputStream en String .
El resultado será algo así como
Pros
Es puro java
Se puede mejorar fácilmente agregando diferentes encabezados (en lugar de pasar un objeto nulo, como lo hace el ejemplo anterior), autenticación, etc.
Se admite el manejo de conmutadores de protocolo
fuente