Auslesen des Inhalts einer durch Login geschützten Website mit Java

URL dieses Beitrags: http://blog.stefan-macke.com/2008/09/23/auslesen-des-inhalts-einer-durch-login-geschuetzten-website-mit-java/

Wenn eine Website eine POST-Authentifizierung erfordert (bspw. über ein Login-Formular) um Daten herunterzuladen, kann man dies mit den üblichen Java-Klassen lösen (z.B. mit URLConnection, siehe hier: Sending a POST Request Using a URL). Wenn aber ein Session-Konzept mit Cookies mit ins Spiel kommt, wird dies schon schwieriger.

Wie gut, dass es die Apache Commons-Bibliotheken gibt. Damit geht es recht einfach (wie auf Tutorials.de beschrieben). Eine nette Gegenüberstellung der beiden Methoden gibt es hier: A Comparison of java.net.URLConnection and HTTPClient.

  1. package JavaTest;
  2. import org.apache.commons.httpclient.HttpClient;
  3. import org.apache.commons.httpclient.cookie.CookiePolicy;
  4. import org.apache.commons.httpclient.methods.GetMethod;
  5. import org.apache.commons.httpclient.methods.PostMethod;
  6. public class PostTest
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 try
  11.                 {
  12.                         HttpClient client = new HttpClient();
  13.                        
  14.                         GetMethod getMethod1 = new GetMethod("http://example.org/geheim.php");
  15.                         client.executeMethod(getMethod1);
  16.                         System.out.println("Aufruf ohne Login -----------------");
  17.                         System.out.println(getMethod1.getResponseBodyAsString());
  18.                         System.out.println("-----------------------------------");
  19.                        
  20.                         PostMethod postMethod1 = new PostMethod("http://example.org/login.php");
  21.                         postMethod1.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
  22.                         postMethod1.addParameter("name", "stefan");
  23.                         postMethod1.addParameter("pass", "geheim");
  24.                         client.executeMethod(postMethod1);
  25.                         System.out.println("Login -----------------------------");
  26.                         System.out.println(postMethod1.getResponseBodyAsString());
  27.                         System.out.println("-----------------------------------");
  28.                        
  29.                         client.executeMethod(getMethod1);
  30.                         System.out.println("Aufruf nach Login -----------------");
  31.                         System.out.println(getMethod1.getResponseBodyAsString());
  32.                         System.out.println("-----------------------------------");
  33.                 }
  34.                 catch (Exception e)
  35.                 {
  36.                         e.printStackTrace();
  37.                 }
  38.         }
  39. }

Wichtig wäre vielleicht noch, alle hierfür benötigten Bibliotheken einzubinden, damit man sich die vielen ClassNotFound-Exceptions sparen kann:

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Kommentare zu diesem Beitrag

  1. Gravatar Blogiade
    Am 22. October 2008 um 20:07 Uhr

    Also mit dem Titel hast Du mich ganz schön in die Irre geführt. Bin über deinen Blog-Beitrag eher zufällig gestolpert ... was du eigentlich meinst, ist es POST-Daten mittels eines http-Client zu übertragen um dann in Folge in derselben Session weitere Seiten abrufen , das es sich dabei um eine Login-Form handelt ist dabei doch eher nebensächlich , oder?!?

  2. Gravatar Stefan
    Am 22. October 2008 um 21:32 Uhr

    Da hast du natürlich Recht (das schreibe ich aber ja auch so). Mein Anliegen bei dem beschriebenen Progrämmchen war halt, eine passwortgeschützte Seite aufzurufen und dort eine Datei herunterzuladen. Deswegen die Überschrift :-)

  3. Gravatar Beck
    Am 4. November 2008 um 22:53 Uhr

    Danke für den Post. Das ist echt interessant, auch die Links, die du mit an den Start gebracht hast. Da kann man sich gleich mal ein wenig weiter bilden, was ich jetzt auch tun werde! Obwohl es schon erschreckend ist, dass man die Daten so leicht finden kann.

Einen Kommentar schreiben

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>