HTTP Post?!? - Java Server

SuchtyTV

Mitglied
Hallo,

ich baue mir gerade einen redundanten HTTP-Server um mir die ganze Thematik verständlicher zu machen.
Der folgende Code liest einen HTTPRequest/post aus und antwortet... (er ist noch nicht fertig)

Code:
package com.company;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class HttpThread implements Runnable {

    private Socket socket;

    public HttpThread(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {

        try {
            PrintWriter out =
                    new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in =
                    new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));


            String userInput;
            StringBuffer buffer = new StringBuffer();
            System.out.println("Test");
            while ((userInput = in.readLine()).length()!=0) {
                buffer.append(userInput);
                buffer.append('\n');
                System.out.println(userInput);
            }
            ...


    }

}

Aber vor allen Dingen liest er die Anfragen der Browser aus.
Ihr könnt euch hier selbst überzeugen: www.rosenheim-cainsdorf.de:903

Die Get-requests werden korrekt gelesen, aber bei einem Passwordpost kommt nur Müll raus.
Vllt könnt ihr mir ja sagen, woran das liegt 🙂 Ich finde es aber schon sehr eigenartig.



Code:
GET / HTTP/1.1
Host: www.rosenheim-cainsdorf.de:903
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,eu;q=0.6

HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login!</title>
</head>
<body>
<form action="https://www.rosenheim-cainsdorf.de:903" method="post">
    <ul>
        <li>
            <label for="login">Benutzer</label>
            <input id="login" name="login">
        </li>
        <li>
            <label for="pass">Passwort</label>
            <input id="pass" name="pass" type="password">
        </li>
        <li>
            <button>anmelden</button>
        </li>
    </ul>
</form>
</body>
</html>
GET /favicon.ico HTTP/1.1
Host: www.rosenheim-cainsdorf.de:903
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
DNT: 1
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://www.rosenheim-cainsdorf.de:903/
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,eu;q=0.6

HTTP/1.1 404 Not Found


Test
Test
�p�P3�W:!���-�C�I��
g���m���sx0� C��8�#r<'=��m��/����)�r��xJ� ZZ�+�/�,�0̨̩����/5���www.rosenheim-cainsdorf.de�


#
hhttp/1.1
3+)
    �����a�uG��[��Ҵ���/���r�%�(-+

�����
Jz�
��Z�
^[[?1;2c^C
 
Zuletzt bearbeitet von einem Moderator:

httpdigest

Top Contributor
Liegt höchstwahrscheinlich daran, dass der Response-Body eben gzip't ist, wie der Browser es auch wollte: `Accept-Encoding: gzip, deflate`
 

mrBrown

Super-Moderator
Mitarbeiter
Was soll denn die Ausgabe überhaupt darstellen?


In dem Java-Code dürfte aber mindestens das Einlesen fehlerhaft sein, (userInput = in.readLine()).length()!=0 liest bis zur ersten leeren Zeile, würde aber beim Stream-Ende einen NPE werfen.
 

SuchtyTV

Mitglied
Was soll denn die Ausgabe überhaupt darstellen?


In dem Java-Code dürfte aber mindestens das Einlesen fehlerhaft sein, (userInput = in.readLine()).length()!=0 liest bis zur ersten leeren Zeile, würde aber beim Stream-Ende einen NPE werfen.

Ok, danke 😊
(Eine Leerzeile bedeutet doch s.equals("\0") Was EOF bedeutet??? Sehe ich da was falsch)
Wie würdest du es machen? Leider geht != null nicht, weil Chrome den Stream nie terminiert.

Ich poste mal den ganzen Code:

Code:
package com.company;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class HttpThread implements Runnable {

    private Socket socket;

    public HttpThread(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {

        try {
            PrintWriter out =
                    new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in =
                    new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));


            String userInput;
            StringBuffer buffer = new StringBuffer();
            System.out.println("HTML REQUEST/POST:\n");
            while ((userInput = in.readLine()).length()!=0) {
                buffer.append(userInput);
                buffer.append('\n');
                System.out.println(userInput);
            }
            System.out.println("HTML REQUEST END\n");

            System.out.println("HTML RESPONSE:\n");
            String answer = process(buffer.toString());
            System.out.println("\n"+answer);
            System.out.println("HTML RESPONSE END\n");

            out.println(answer);
            out.close();
            in.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    private String process(String request) {
        StringBuffer buf = new StringBuffer();
        if(request.contains("GET /favicon.ico HTTP/1.1")){
            buf.append("HTTP/1.1 404 Not Found\n\n");
            return buf.toString();
        } else {
            buf.append("HTTP/1.1 200 OK\n\n");
            buf.append(Server.HTMLLOGIN);
            return buf.toString();
        }
    }
}

Code:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.company;

import java.io.IOException;

public class Main {
    public Main() {
    }

    public static void main(String[] args) {
        System.out.println("This Server starts running.\n");
        Server server = new Server(Integer.parseInt(args[0]));

        try {
            server.start();
        } catch (IOException var3) {
            var3.printStackTrace();
        }

    }
}

Code:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {
    public static String HTMLLOGIN;
    private int portnum;
    private ServerSocket serverSocket;
    private ExecutorService executorService;

    public Server(int portnum) {
        this.portnum = portnum;

        try {
            this.serverSocket = new ServerSocket(portnum);
        } catch (IOException var6) {
            var6.printStackTrace();
        }

        try {
            InputStream input = this.getClass().getResourceAsStream("login.html");
            BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
            StringBuilder stringBuilder = new StringBuilder();

            for(char[] buffer = new char[10]; reader.read(buffer) != -1; buffer = new char[10]) {
                stringBuilder.append(new String(buffer));
            }

            reader.close();
            HTMLLOGIN = stringBuilder.toString();
        } catch (IOException var7) {
            var7.printStackTrace();
        }

        this.executorService = Executors.newFixedThreadPool(4);
    }

    public void start() throws IOException {
        while(true) {
            Socket socket = this.serverSocket.accept();
            this.executorService.submit(new HttpThread(socket));
        }
    }
}


Ich mache jetzt folgendes. Server starten. Mit Chrome darauf zu greifen. (www.rosenheim-cainsdorf.de:902) Das Formular ausfüllen.
Das Formular abschicken.

Ich bekomme dann diesen Output:

Code:
HTML REQUEST/POST:

HTML REQUEST/POST:

GET / HTTP/1.1
Host: www.rosenheim-cainsdorf.de:903
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Purpose: prefetch
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,eu;q=0.6
HTML REQUEST END

HTML RESPONSE:


HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login!</title>
</head>
<body>
<form action="https://www.rosenheim-cainsdorf.de:903" method="post">
    <ul>
        <li>
            <label for="login">Benutzer</label>
            <input id="login" name="login">
        </li>
        <li>
            <label for="pass">Passwort</label>
            <input id="pass" name="pass" type="password">
        </li>
        <li>
            <button>anmelden</button>
        </li>
    </ul>
</form>
</body>
</html>
HTML RESPONSE END

HTML REQUEST/POST:

HTML REQUEST/POST:

HTML REQUEST/POST:

��U��³�ďI
�El+�@O��    y�y(U ��^��ۼ�����L��ظas����
HTML REQUEST END

HTML RESPONSE:


HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login!</title>
</head>
<body>
<form action="https://www.rosenheim-cainsdorf.de:903" method="post">
    <ul>
        <li>
            <label for="login">Benutzer</label>
            <input id="login" name="login">
        </li>
        <li>
            <label for="pass">Passwort</label>
            <input id="pass" name="pass" type="password">
        </li>
        <li>
            <button>anmelden</button>
        </li>
    </ul>
</form>
</body>
</html>
HTML RESPONSE END

Was offensichtlich keinen Sinn ergibt. (also nicht richtig ist)
 
Zuletzt bearbeitet:

SuchtyTV

Mitglied
Eine weiterführende Frage wäre vllt:

Woher weiß ich, dass der Request:


Code:
GET / HTTP/1.1
Host: www.rosenheim-cainsdorf.de:903
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Purpose: prefetch
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,eu;q=0.6


Tatsächlich dort endet...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
C HTTP POST Connect Netzwerkprogrammierung 9
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
M Http POST liefert kryptischen Content Netzwerkprogrammierung 4
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
E upload progress bei einem http file post Netzwerkprogrammierung 5
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
B totale HTTP/1.0 Verwirrung bei POST Netzwerkprogrammierung 5
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
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 http request and response Netzwerkprogrammierung 0
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
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
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
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
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
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
L Body eines http Request auslesen Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
D http request Netzwerkprogrammierung 11
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
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
R HTTP Server Memory Leak? Netzwerkprogrammierung 6
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
K optimale HTTP Downloads Netzwerkprogrammierung 15
G auf http-request antworten. Netzwerkprogrammierung 3
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
L Java HTTP Request Netzwerkprogrammierung 3
O Axis2 erstellt HTTP/1.1 anstatt HTTP/1.0 Netzwerkprogrammierung 3
B Fehler 401 bei http GET Netzwerkprogrammierung 2
S HTTP Request erstellen Netzwerkprogrammierung 2
B lange Strings in http-Request? Netzwerkprogrammierung 3
K http-download Netzwerkprogrammierung 12
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
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
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
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
P Easy Http Request Netzwerkprogrammierung 9
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
S http Server selber schreiben Netzwerkprogrammierung 5
S Suche API für einfachen HTTP-Zugriff. Netzwerkprogrammierung 17
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

Ähnliche Java Themen

Neue Themen


Oben