![]() |
HTTP-Request InputStream-Problem
!!!!!! JAVA !!!!!!
Möchte mir einen webLoader programmieren (fragt nicht warum, einfach so) Das HTTP-Protokoll sieht ja folgendermaßen aus: Die Anfrag an den Server:
Code:
Die Antwort des Servers sieht dann so aus:
GET /test/hallo.rar HTTP/1.1
Host: [url]www.test.com[/url]
Code:
Jetzt hab ich das Problem, dass der HTTP-Header der Antwort auf dem gleichen Stream daherkommt, wie die Daten selbst.
HTTP/1.1 200 OK
Date: Mon, 27 Oct 2008 11:47:38 GMT Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 Last-Modified: Mon, 27 Oct 2008 09:16:16 GMT ETag: "973736-77ac-490586e0" Accept-Ranges: bytes Content-Length: 30636 Connection: close Content-Type: text/plain ... <bytes der .rar-Datei> ... Also hab ich versucht mit einem BufferedReader bis nach "content-type: text/plain" einzulesen, und dann den Rest in die entsprechende Datei schreiben. Funktioniert nicht, da der Buffer des BufferedReader mehr einliest(also schon auch die ersten bytes der Datei). Wenn ich gleich alles in die Datei schreib (samt HTTP-Header), die Datei dann editieren (d.h. den HTTP-Header per Hand rauslösche, klappt es! aber eben ein bisschen umständlich. hier mal mein code:
Code:
Übrigens URLParser ist eine eigene Klasse, die mir aus der URL
public Main(URLParser urlParser, File file) throws UnknownHostException, IOException
{ InetAddress addr = InetAddress.getByName(urlParser.getHostname()); Socket socket = new Socket(addr, urlParser.getPort()); OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); BufferedWriter toServer = new BufferedWriter(new OutputStreamWriter(os)); BufferedReader fromServer = new BufferedReader(new InputStreamReader(is)); toServer.write("GET "+ urlParser.getFilepath() +" HTTP/1.1"); toServer.newLine(); toServer.write("Host: "+ urlParser.getHostname()); toServer.newLine(); toServer.newLine(); toServer.flush(); String line = ""; while((line = fromServer.readLine()).length() > 0) { System.out.println(line); } FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int n = 0; while((n = is.read(buffer)) != -1) { fos.write(buffer, 0, n); } fos.flush(); fos.close(); toServer.close(); } ![]() protokoll - http hostname - ![]() port - 8080 filepath - /test/hallo.rar filename - hallo.rar danke im voraus mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz