Problem beim Lesen aus Socket-Verbindung
Kay
- java
Hallo,
ich habe einen kleinen Webserver in Java erstellt. Dabei werden die durch einen Client gesendeten Daten aus einer Socket-Verbindung gelesen.
Für die GET-Methode funktioniert das auch sehr gut.
Allerdings habe ich Probleme, die Daten einer POST-Anweisung zu lesen. Ich fülle ein HTML-Formular aus und schicke es mit der Methode POST an den Server - gut.
Die Header-Daten kann ich auch lesen - die verwendete Methode, Dateiname, HTTP-Protokoll, Content-Type, User-Agent etc. lassen sich einwandfrei ermitteln. Die Daten der z.B. Eingabefelder bekomme ich nicht - hab' mal 'nen Codeschnipsel gepostet - wo liegt der Fehler?
Ich danke schon mal für Hilfe - komme nämlich nicht mehr weiter :-)
InputStream is = null;
BufferedReader br = null;
try {
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
}
catch (IOException e) {
}
String requestLine = "";
try {
requestLine = br.readLine();
}
catch (IOException e) {
}
String headerLines = requestLine + "\r\n";
String headerLine;
try {
while ((headerLine = br.readLine()) != null && headerLine.length() > 0)
headerLines += headerLine + "\r\n";
}
catch (IOException e) {
}
StringTokenizer tokens = new StringTokenizer(requestLine, " ");
String requestMethod = tokens.nextToken();
String fileName = tokens.nextToken();
String httpProtocol = tokens.nextToken();
if (requestMethod.equals("POST")) {
try {
byte[] bytes = new byte[2];
DataInputStream dis = new DataInputStream(is);
dis.read(bytes);
dis.close();
resultString = "" + (char)bytes[0] + (char)bytes[1];
}
catch (IOException e) {
}
}
Hallo,
StringTokenizer tokens = new StringTokenizer(requestLine, " ");
String requestMethod = tokens.nextToken();
String fileName = tokens.nextToken();
String httpProtocol = tokens.nextToken();if (requestMethod.equals("POST")) {
try {
byte[] bytes = new byte[2];
DataInputStream dis = new DataInputStream(is);
dis.read(bytes);
dis.close();
resultString = "" + (char)bytes[0] + (char)bytes[1];
}
catch (IOException e) {
}
}
Was passiert denn genau? Welche Testausgaben (System.out.println(variable);) hast Du wo versucht und was haben sie ausgegeben? Welche Fehlermeldungen werden erzeugt?
Du liest hier zwei Bytes aus. Bei Post werden vom Client in den Request-Headern die Felder Content-type (Content-Type)[1] und Content-length (Content-Length)[1] mitgeliefert. Diese musst Du parsen. Bei Content-type == "application/x-www-form-urlencoded" kannst (_musst_) Du Content-length Zeichen lesen. Bei Content-type == "multipart/form-data" wirds sehr viel komplizierter.
[1] leider manchmal auch
viele Grüße
Axel
Hallo,
Fehler:
Content-type (Content-Type)[1] und Content-length (Content-Length)[1]
[1] leider manchmal auch
Das leider muss natürlich genau nach der anderen Schreibweise stehen.
Richtig laut RFC 2616 ist
Content-Type
und
Content-Length.
viele Grüße
Axel