HuDeanY Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Hallo Folks, Ich hätte da mal wieder ein nettes Problemchen: Ich möchte von einer Web-Seite eine Datei herunterladen. Zum Beispiel von www.hugoegon.de die Datei index.html (genauer eine von mir auf einer privaten Seite bereitgestellte Datei) Mal ganz einfach gedacht: Die Klasse File hat auch einen Konstruktor File(URI) nur bringt mich die Klasse URI auch nicht weiter weil ich damit scheinbar nur lokale Dateien spezifizieren kann. Mit HttpRequest-Klassen hab ich mich so noch ned rumgeschlagen aber leider auf anhieb auch nix passendes gefunden. Hat von euch jemand schon mal ein ähnliches Problem gehabt und noch viel wichtiger vielleicht eine Lösung ... wenn auch nur ne Idee ... dazu? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_Arvid_ Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Ich möchte von einer Web-Seite eine Datei herunterladen. Sowas Ähnliches hab ich mal vor knapp einem Jahr gemacht. Allerdings habe ich sie nicht herunter geladen, sondern nur ausgelesen. Also wenn dir das schon weiter hilft, hier mal der Code davon (Package-Angabe lass ich mal weg, is ja momentan Bratwurst):import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; import java.net.HttpURLConnection; public class HtmlLeser { private HttpURLConnection httpURLConnection; private int responseCode; public HtmlLeser(HttpURLConnection httpURLConnection) throws IOException { setHttpURLConnection(httpURLConnection); } public HttpURLConnection getHttpURLConnection() { return httpURLConnection; } public void setHttpURLConnection(HttpURLConnection httpURLConnection) throws IOException { this.httpURLConnection = httpURLConnection; if (httpURLConnection != null) { try { responseCode = httpURLConnection.getResponseCode(); } catch (ConnectException e) { // nix... weiter geht's! } } else { responseCode = HttpURLConnection.HTTP_BAD_REQUEST; } } public boolean isLinkOk() { return responseCode == HttpURLConnection.HTTP_OK; } public String getInhalt() throws IOException { if (isLinkOk()) { try { InhaltHoler thread = new InhaltHoler(httpURLConnection); thread.setDaemon(true); thread.start(); Thread.sleep(1500); thread.interrupt(); return thread.getInhalt(); } catch (InterruptedException e) { e.printStackTrace(); } } return ""; } private class InhaltHoler extends Thread { private HttpURLConnection connection; String inhalt = ""; public InhaltHoler(HttpURLConnection conn) { connection = conn; } public void run() { try { InputStream stream = connection.getInputStream(); StringBuffer inhaltBuffer = new StringBuffer(); int zeichenInt; char zeichenChar; while ((zeichenInt = stream.read()) != -1) { zeichenChar = (char) zeichenInt; inhaltBuffer.append(zeichenChar); } inhalt = inhaltBuffer.toString(); } catch (Exception e) { e.printStackTrace(); } } public String getInhalt() { return inhalt; } } } Mir is grad noch aufgefallen, der InhaltHoler sollte eher Runnable implementieren und nicht von Thread erben. Wäre schöner für's Auge. Das kannste ja dann selbst machen, wenn du diesen Code überhaupt gebrauchen kannst. Natürlich sollte man auch nicht, wie ich es damals machte, leere Strings zurück geben, wenn was schief läuft, sondern NULL. Aber das hatte damals bei mir schon seine speziellen Gründe, weiß die nur jetzt nicht mehr... 'Ne HttpURLConnection kriegst du übrigens aus einem URL. Etwa so:String link = "http://www.deineSeite.de"; // "http" nicht vergessen! URL url = new URL(link); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); Hoffe, das ist das, wonach du gesucht hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 14. Oktober 2005 Teilen Geschrieben 14. Oktober 2005 im prinzip reicht die URL Klasse. aus der URL kannst du die URLConnection beziehen, aus der Connection den Inputstream. Den Inputstream in einen Inputstreamreader gegeben und das dann am besten in einen BufferedReader...und dann hast du den ganzen Quelltext dieser Datei. habs ausprobiert. Probleme könntest du bekommen wenn dein Clientrechner mit Firewall oder Proxy versehen ist, die eine Internetverbindung nur auf explizite Freigabe (Username, Passwort im IE o.ä.) erlauben..... das habe ich noch nicht hinbekommen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_Arvid_ Geschrieben 14. Oktober 2005 Teilen Geschrieben 14. Oktober 2005 wenn dein Clientrechner mit Firewall oder Proxy versehen istHinter einem Proxyserver saß ich damals auch. Allerdings bin ich ohne Probleme durch gekommen... Dafür eben entsprechend die System-Properties anpassen. Den Inputstream in einen Inputstreamreader gegeben und das dann am besten in einen BufferedReader...und dann hast du den ganzen Quelltext dieser Datei.Großartig was Anderes is das ja auch nich in meinem Beispiel. Und noch ein kleines post scriptum zu meinem (zugegebenermaßen nicht perfekten) Beispiel für die HttpURLConnection: Der String mit dem Link für den URL muss natürlich auf eine konkrete Datei verweisen, nicht auf eine ganze Web-Seite. Also sollte da eher sowas wie link="http://deineSeite.de/index.html" stehen. So viel von mir. Gruß. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 14. Oktober 2005 Teilen Geschrieben 14. Oktober 2005 Die Klasse File hat auch einen Konstruktor File(URI) nur bringt mich die Klasse URI auch nicht weiter weil ich damit scheinbar nur lokale Dateien spezifizieren kann.Richtig, denn public File(URI uri) Creates a new File instance by converting the given file: URI into an abstract pathname. Was vielleicht noch, neben den Tips, die du schn bekommen hast ganz interessant sein könnte, ist ein HTTP Client Package, z.B.: HTTPClient http://jakarta.apache.org/commons/httpclient/ oder (was ich deutlich besser finde) HTTPUnit http://httpunit.sourceforge.net/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.