Home > Programmieren > Java – HTML-Code über URL auslesen

Java – HTML-Code über URL auslesen

18. Juli 2010

Eine sehr einfache Aufgabe: Man soll den HTML-Code von der URL http://xyz.com/helloWorld.htm auslesen.

In Java gibt es sehr viele Möglichkeiten diese Aufgabe zu bewältigen. Vor allem die Klassen URLConnection und URL bieten sich hier an. Während bei URLConnection die Methode getContent() leider sehr umständlich zu handhaben ist, lässt sich die Aufgabe mit der Klasse URL schnell lösen:

/*This Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
This Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details. 
<http ://www.gnu.org/licenses/>.*/
import java.io.*;
import java.net.*;
import java.util.*;
 
public String fetchPage(String url) {
  InputStream is = null;
  StringBuilder sb = new StringBuilder();
 
  try {
    URL u = new URL(url);
    is = u.openStream();
    DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
    String s;
 
    while ((s = dis.readLine()) != null) {
      sb.append(s);
      sb.append("\n");
    }
 
  } catch (MalformedURLException ex) {
    ex.printStackTrace();
 
  } catch (IOException ex) {
    ex.printStackTrace();
 
  } finally {
    try {
      is.close();
    } catch (IOException ioe) {
      // ignore
    }
  } // try
  return sb.toString();
} // fetchPage

Die Klasse Scanner erlaubt es hier nochmal etwas Code einzusparen. Somit lässt sich der HTML-Code noch etwas einfacher auslesen:

/*This Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
This Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details. 
<http ://www.gnu.org/licenses/>.*/
import java.io.*;
import java.net.*;
import java.util.*;
 
public String fetchPage(String url) {
  StringBuilder sb = new StringBuilder();
  try {
    Scanner scanner = new Scanner(new URL(url).openStream());
    while (scanner.hasNextLine()) {
      sb.append(scanner.nextLine() + "\n");
    }
    scanner.close();
  } catch (MalformedURLException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return sb.toString();
} // fetchPage
Categories: Programmieren Tags: , , , ,
  1. 8. Oktober 2010, 17:36 | #1

    Genau das machen wir (oder derzeit eher ich) im Studienprojekt mit C#, zur Kommunikation mit Bugzilla. Das REST API wäre zwar vielleicht eleganter zum Eintragen von Bugs, aber das habe ich unter Windows noch nicht zum Laufen gebracht. (ich hasse Perl unter Windows …)

  2. 26. Oktober 2010, 15:15 | #3

    @Richi
    Danke für die Links. Ist zwar für uns nicht so relevant, da wir Bugzilla nicht für unser Projekt selbst verwenden, sondern wir unsere Implementierung auf Bugzilla aufsetzen. Ich habe mir den Code von Bugzilla.NET zum Teil angeschaut. Der Code für den Login z.B. sieht tatsächlich fast genau so aus wie der, den ich selbst geschrieben habe (mit HttpWebRequest und Cookies usw.). Sieht so aus, als wäre der Zugriff über HTTP wohl doch am einfachsten, das ist jetzt schon das zweite Beispiel außer meinem eigenen, wo das so gemacht wird.

    Das mit dem ServiceStack ist für mich nicht so relevant, weil das REST API in unserer Installation sowieso nicht funktioniert, was auch daran liegt, dass unser Bugzilla auf Windows läuft …

Kommentare sind geschlossen