# Problem zu HttpClient!



## Sebastian29 (4. Juni 2008)

Hi an Alle!

Ich fummel gerade nur ein bisschen mit HttpClient rum! Warum wird bei mir ein Exception rausgeworfen! Ich benutze mit Eclipse und die Java-Version ist 1.4.2! Die wichtige Jar-Datei für HttpClient ( commons-httpclient-3.1.jar ) habe ich auch schon drin!
Welche Werkzeuge fehlen denn noch oder was habe ich überhaupt falsch gemacht?


```
public static void main(String[] args) throws Exception
    {
        HttpClient client = new HttpClient();           <---- Beim Start knallt die untengenannte Exception
        client.getHostConfiguration().setHost("xxxxxxxx", xxxx, "http");
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        PostMethod postMethod = new PostMethod("/xxxxxxxx/login.php");
        postMethod.addParameter("username", "ABC");
        postMethod.addParameter("password", "XYZ");
        client.executeMethod(postMethod);
        System.out.println(postMethod.getResponseBodyAsString());
    }
```


```
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
	at Beispiel1.CommonsHttpClientExample.main(CommonsHttpClientExample.java:12)
```

Gruß
Sebastian29


----------



## zerix (4. Juni 2008)

Ich würde einfach mal behaupten, dass du ein Jar-File nicht eingebunden hast. 

Bei dem Jar-File, dass du eingebunden hast, sind sicherlich noch andere Jars mit ausgeliefert worden. Meistens in einem Ordner names lib. Schau da mal nach und binde diese Jars auch noch ein.

MFG

Sascha


----------



## Sebastian29 (4. Juni 2008)

Also, ich habe 100% von http://hc.apache.org/downloads.cgi den 1. namens Commons HttpClient 3.1 unter Binary runtergeladen! Muss ich die andern wie HttpCore 4.0-beta1 auch runterladen?

Gruß
Sebastian29


----------



## Oliver Gierke (4. Juni 2008)

Nein, in dem Zip liegt im Ordner bin ein commons-http-xxx.jar. Das musst du in den Classpath aufnehmen (hast du ja laut deiner Aussage schon). Nun hat das Projekt aber noch eine Dependency zu commons-logging. Diese Dependencies liegen in den Zips meist in einem Ordner lib. D.h da sollte ein commons-logging-xxx.jar liegen - das muss auch noch in den Classpath.

REINHAUN!


----------



## Sebastian29 (5. Juni 2008)

Hi an alle!

Sorry, dass ich mich jetzt melde! Also, es klappt soweit ganz gut!

Eine Frage habe ich noch zu HttpClient:

Sobald ich mit der HttpClient - Verbindung zum WebServer hergestellt habe, möchte ich dort gerne auf den Ordner zugreifen, wo dort PDF-Dateien drin sind, die ich gerne auslesen möchte.
Wie kann ich dann auf den Ordner zugreifen, da ich auch gleichzeitig prüfen muss, ob ich immer noch eingeloggt bin oder so. Um die PDF-Dateien auszulesen, ist für mich kein Problem!

Ich weiss nur nicht, mit welchem Befehl aus dem Werkzeug von HttpClient oder allgemein von Apache ich nehmen kann, um den Ordner im WebServer zu öffnen!

Danke im voraus!

Gruß
Sebastian


----------



## Oliver Gierke (5. Juni 2008)

Frage: hast du HTTP verstanden? Du kannst auf einem WebServer keine "Ordner öffnen". Du kannst GET Requests auf URLs absetzen um eine Resource anzufordern.

http://de.wikipedia.org/wiki/HTTP

REINHAUN!


----------



## Sebastian29 (5. Juni 2008)

Hi Oli!

Ja, habe Http wohl verstanden! Mit dem "Ordner öffnen" habe ich wohl falsch ausgedrückt! Damit meine ich, dass ich gerne in diesem Ordner irgendeine pdf-Datei downloaden möchte!

Also, irdgendwie mit url.getOutputStream() oder so!

Gruß
Sebastian29


----------



## Billie (5. Juni 2008)

Also wenn du du die URL des PDF kennst, dann anfragen (Request) und antwort (Response) erhalten... Wenn du Glück hast, antwortet der HTTP-Server mit deinem gewünschten PDF.

Du hast doch schon mit dem HTTP-Client einen Request abgesetzt (beim Login). Wo liegt jetzt das weitere Problem?!


----------



## Sebastian29 (5. Juni 2008)

Hi Billie!

Das weitere Problem ist, ich weiss nur, wo die PDF-Dateien liegen, aber wie die PDF-Dateien heissen, die können beliebig sein, da der Dateiname der PDF-Datei mit Zeit und Datum gespeichert wird.

Zum Beispiel:

URL-Path = http://www.test.de/pdf/
Datei-Path = 20080605_153600.pdf

Am liebsten möchte ich gerne, dass man nach dem Download mit JList alle PDF-Dateien einfügen kann! Dann kann ich nach dem Auswählen eine bestimmte PDF-Datei, wie du mir gerade deinen Tipp vorgeschlagen hast, öffnen und anzeigen!

Gruß
Sebastian29


----------



## Oliver Gierke (6. Juni 2008)

Hm, naja, deinen Fragen nach zu urteilen gibt es da schon ein paar erhebliche Wissenslücken.

Bei HTTP wird jede Resource durch eine URL identifiziert. Um diese Resourcen zu konsumieren musst du diese URLs kennen. HTTP ist kein Dateisystem. D.h. http://foo.com/bar/ aufrufen und alle Unterdokumente bekommen geht zwar (du müsstest den Directoryindex auf dem Webserver aktivieren und das Responsedokument parsen) ist aber unschön.

Die einzig wirklich saubere lösung wäre z.B. unter http://foo.com/bar/pdfs(.txt/.xml) eine Datei mit definiertem Format zu hinterlegen, die die konkreten URLs oder zumindest die Namen enthält.

Gruß
Ollie


----------



## Sebastian29 (6. Juni 2008)

Moin Olli!

Gut, dann müsste ich ja eine eigene PHP-Datei anlegen, die eine Liste aller PDF-Dateinamen in pdfs.txt speichern soll und Java greift auf die Text-Datei zu.

Habe ich das soweit richtig verstanden?

Natürlich ist HTTP kein Dateisystem, aber so habe ich mir wirklich vorgestellt! 

Gruß
Sebastian29


----------



## Oliver Gierke (6. Juni 2008)

Das PHP Skript kann auch einfach das Directory scannen und ein XML mit den einträgen zurückliefern. Sowas birgt natürlich einige Sicherheitsrisiken die man beachten sollte (Was, wenn da aus Versehen ein Executable in dem Ordner liegt und du dir das holst? o.ä.).

Gruß
Ollie


----------



## Sebastian29 (6. Juni 2008)

> Die einzig wirklich saubere lösung wäre z.B. unter http://foo.com/bar/pdfs(.txt/.xml) eine Datei mit definiertem Format zu hinterlegen, die die konkreten URLs oder zumindest die Namen enthält.



Hm, welches Programm kann sonst eine txt-Datei ohne Sicherheitrisiken hinterlegen?

Vielleicht habe ich das obengenannte Zitat nicht ganz verstanden!

Gruß
Sebi


----------



## Oliver Gierke (6. Juni 2008)

Wo hab ich den was von Programm gesagt?  Ohe Sicherheitsrisiken geht sowieso nicht. Ich wollte lediglich drauf hinweisen, dass ein PHP Skript das folgendes macht "Gib mir alle dateien in meinem Ordner und wirf die Dateinamen in ein XML und gib das zurück" potentiell unsicher sein kann.

Wenn du deinen Kollegen vertraust können die auch ein TXT auf dem server von Hand editieren. Es könnte auch ein Servlet laufen, was die Liste ausspuckt. Keine Ahnung... das hängt von deinen Anforderungen ab.

Gruß
Ollie


----------



## Sebastian29 (6. Juni 2008)

Du hast nirgendwo was von Programm gesagt!  Damit meine ich nur, WER soll sonst die txt-Datei erstellen.

Aber ich habe soweit verstanden, was ich machen muss! Es ist weder Servlet noch Java EE eingebaut, sondern nur ganz normal in Apache mit PHP und MySQL!

Trotzdem vielen Dank für die Tipps! 

Gruß
Sebastian29


----------

