una pagina obtener navegador leer ejemplo desde descargar datos con cliente archivo abrir java http url

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



obtener datos de una pagina web con java (8)

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


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


Ejemplo adicional usando Guava:

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


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


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 codificación).


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 .

Ejemplo

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

salidas

<!doctype html><html itemscope="" .... etc

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