HTTP-Request InputStream-Problem

Status
Nicht offen für weitere Antworten.

geisi

Aktives Mitglied
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:
GET /test/hallo.rar HTTP/1.1
Host: [url]www.test.com[/url]

Die Antwort des Servers sieht dann so aus:
Code:
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> ...

Jetzt hab ich das Problem, dass der HTTP-Header der Antwort auf dem gleichen Stream daherkommt, wie die Daten selbst.
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:
    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();        
    }

Übrigens URLParser ist eine eigene Klasse, die mir aus der URL http://www.test.com:8080/test/hallo.rar folgendes rausholt:
protokoll - http
hostname - www.test.com
port - 8080
filepath - /test/hallo.rar
filename - hallo.rar

danke im voraus
mfg
 
T

tuxedo

Gast
>> 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).

Dann nimm einfach keinen BUfferedReader ... Dann hast du dieses Problem nicht.

- Alex
 

geisi

Aktives Mitglied
Wie kann ich dann den HTTP-Header auslesen? vom BufferedReader bekomm ich einen String zurück, vom InputStreamReader bekomm ich nur bytes zurück
 
T

tuxedo

Gast
Es geht ja nicht drum das "aus bytes einen String machen können" wegzulassen, sondern das "buffern" wegzulassen.

DataInputStream kennst du?

- Alex
 

geisi

Aktives Mitglied
nein, bisher noch nicht! hab gesehen, dass die Funktion readLine DEPRECATED ist! mit welcher funktion soll ich jetzt Strings lesen?
 
T

tuxedo

Gast
Du sollst keine Strings lesen, du sollst bytes lesen und daraus wieder einen String machen. Schau dir doch mal die Konstruktoren in der String-Klasse an...

Und warum in <such dir einen Gott aus> Namen bastelst du bei HTTP Dingen mit einer Socketverbindung rum? Wieso das Rad neu erfinden?!

Code:
URL url = new URL("http://hostname:80/myfile.ext");
        URLConnection conn = url.openConnection();
... new InputStreamReader(conn.getInputStream());

Da kannst du dir dann den Header-Quatsch sparen und gleich die Bytes speichern ... Nix mehr mit parsen und filtern...

- Alex

P.S. Und wenn du unbedingt den Header brauchst: http://www.exampledepot.com/egs/java.net/GetHeaders.html
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
M http request and response Netzwerkprogrammierung 0
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
L Body eines http Request auslesen Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
D http request Netzwerkprogrammierung 11
G auf http-request antworten. Netzwerkprogrammierung 3
L Java HTTP Request Netzwerkprogrammierung 3
S HTTP Request erstellen Netzwerkprogrammierung 2
B lange Strings in http-Request? Netzwerkprogrammierung 3
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
P Easy Http Request Netzwerkprogrammierung 9
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
Z HTTP Request Netzwerkprogrammierung 3
A http request per socket an apache server Netzwerkprogrammierung 5
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
J HTTP Request Netzwerkprogrammierung 2
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
G Http Request Netzwerkprogrammierung 2
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
G localhost im Backend https vs. http Netzwerkprogrammierung 9
J Simple HTTP Framework (basierend auf expressjs) Netzwerkprogrammierung 1
M HTTP Http requests aufzeichnen Netzwerkprogrammierung 2
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
M Verbindungszeit berechnen (TCP, HTTP/1.0, HTTP/1.1) Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
U HTTP XML vom Server abholen oder http Abfragen, Entscheidung treffen Netzwerkprogrammierung 0
P HTTP Server / Client Netzwerkprogrammierung 1
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
M Server mit HTTP Netzwerkprogrammierung 9
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T HTTP Einen HTTP Server erstellen Netzwerkprogrammierung 20
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
T Socket Java HTTP-Proxy Netzwerkprogrammierung 3
A HTTP Zugriff auf http-Server - Error 400 Netzwerkprogrammierung 11
B HTTP JSESSIONID in Http(s)URLConnection loswerden! Netzwerkprogrammierung 13
E Socket HTTP-Server Netzwerkprogrammierung 6
C HTTP POST Connect Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N Http Client Netzwerkprogrammierung 3
W Asynchroner HTTP Client / non-blocking I/O Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
Kr0e Simpler HTTP Stream server Test Netzwerkprogrammierung 3
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
J org.apache.http.auth.NTCredentials Netzwerkprogrammierung 2
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
A org.apache.commons http client in Netbeans einbinden Netzwerkprogrammierung 3
G Http Client mit Redirect Enabled Netzwerkprogrammierung 2
M Http POST liefert kryptischen Content Netzwerkprogrammierung 4
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
R HTTP Server Memory Leak? Netzwerkprogrammierung 6
K optimale HTTP Downloads Netzwerkprogrammierung 15
I http sniffer gesucht Netzwerkprogrammierung 10
G Socket + HTTP Header Netzwerkprogrammierung 2
R HTTP ServerThread Netzwerkprogrammierung 4
J HTTP GET? Netzwerkprogrammierung 6
C FTP vs HTTP Netzwerkprogrammierung 10
M HTTP-Response extrem fragmentiert Netzwerkprogrammierung 4
W HTTP-Upload Netzwerkprogrammierung 2
M HTTP response code: 401 ; ?aber im browser ist es abrufbar? Netzwerkprogrammierung 5
O Axis2 erstellt HTTP/1.1 anstatt HTTP/1.0 Netzwerkprogrammierung 3
B Fehler 401 bei http GET Netzwerkprogrammierung 2
E upload progress bei einem http file post Netzwerkprogrammierung 5
K http-download Netzwerkprogrammierung 12
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
M RMI over HTTP Netzwerkprogrammierung 5
M HTTP Requests verarbeiten und Response senden mit Java Netzwerkprogrammierung 14
G HTTP Response mit Transfer-Encoding:chunked einlesen Netzwerkprogrammierung 4
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
L file upload / download über http Netzwerkprogrammierung 5
G HTTP Client :: Komme nicht über den Proxy Netzwerkprogrammierung 7
B non US-ASCII Dateinamen über HTTP? Netzwerkprogrammierung 2
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
P File von http-Server kopieren Netzwerkprogrammierung 5
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
G http 1.1 socket? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben