Leer paginas web desde Java
En alguna ocasión he necesitado poder descargarme el contenido de una pagina web y poder recuperar de ella
ciertos valores. ¿Cómo hace esto?. Existen infinidad de formas: desde consola con bash y utilizando varios comandos
podria hacerse facilmente, pero hoy he decidido contaroslo desde un programa Java.
A continuación os presento la clase ApiWeb con la que podras leer páginas web, tanto por el método GET, como
por el método POST:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class ApiWeb {
/**
* Constructor de la clase ApiWeb sin parámetros
*/
public ApiWeb() {
}
/**
* Método para leer páginas web por el método GET
* @param loc String url de la página web a leer
* @throws IOException
* @return String Devuelve el contenido de la página web indicada por loc
*/
public String get(String loc) throws IOException {
URL url = new URL(loc);
URLConnection conexion = url.openConnection();
conexion.setRequestProperty ("User-agent", "deckerix agent");
conexion.setRequestProperty ("From", "deckerix@gmail.com");
BufferedReader in = new BufferedReader(new InputStreamReader(conexion.getInputStream()));
String linea, pagina = "";
while ( (linea = in.readLine()) != null) {
pagina += linea + "\n";
}
return pagina;
}
/**
* Método que permite la lectura de la página web dada como parámetro a través del método POST
* @param loc String página web a leer
* @param query String query que se le puede pasar a la pagina web
* @throws IOException
* @return String la página leída
*/
public String post(String loc, String query) throws IOException {
URL url = new URL(loc);
URLConnection conexion = url.openConnection();
conexion.setRequestProperty ("User-agent", "deckerix agent");
conexion.setRequestProperty ("From", "deckerix@gmail.com");
conexion.setDoOutput(true);
DataOutputStream out = new DataOutputStream (conexion.getOutputStream());
out.writeBytes(query);
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conexion.getInputStream()));
String linea, pagina = "";
while ( (linea = in.readLine()) != null) {
pagina += linea + "\n";
}
return pagina;
}
}
Un ejemplo del uso de esta clase sería el siguiente:
String url = "http://google.es";
String pagina = "";
ApiWeb miApiWeb = new ApiWeb();
try {
pagina = miApiWeb.get(url);
System.out.println(pagina);
}
catch (Exception ex) {
ex.printStackTrace();
}