HTTP Post aus html in Java einlesen - Problem

iChaos

Aktives Mitglied
Ich habe ein Problem:

Und zwar möchte ich Daten aus einem HTML Formular an meinen Webserver senden. Da mit der Get-Methode die Formulardaten sichtbar werden(im Browser zBsp), möchte ich hier die Post-Methode verwenden. Ich weiss, viel sicherer ist es auch nicht, aber andere Möglichkeiten stehen mir zur Zeit nicht offen.
Der Webserver ist selbst geschrieben(Sockets&Streams) und benutzt kein JSP o.ä.
Bis jetzt hatte ich wenig Erfolg, denn ich bekam genau eine Zahl zurück...

Was muss ich anstellen, dass ich alle Daten die eingegeben werden, in der Java-Klasse einlesen und weiterverarbeiten kann?

Hier das html-Formular

HTML:
<html>
	<body>
		<h1>Payment</h1>
		<form name ="formular" action="http://localhost:1111" method="post">
		<p>Vorname</p>
			<input name="firstname" type="text" maxlength="20">
		<p>Nachname</p>
			<input name="lastname" type="text" maxlength="20">
		<p>Passwort</p>
			<input name="pw" type="password" maxlength="20">
		<p>Ihre Kontonummer</p>
			<input name="account1" type="text" maxlength="20">
		<p>Einzuzahlender Betrag</p>	
			<input name="amount" type="text" maxlength="20">
		<p>Betreff</p>	
			<input name="reason" type="text" maxlength="20">
		<p>Kontonummer des Empfängers</p>	
			<input name="account2" type="text" maxlength="20">
			<input type="submit" name="sendButton" value ="Send") ><br>
		</form>
	</body>
</html>

Hier wird soll das ganze eingelesen werden:
Java:
public class Post implements Runnable {

	private Thread postThread;
	private Socket client;
	private InputStream inputStream;
	private int readIn;

	public Post(Socket client) {

		this.client = client;

		postThread = new Thread(this);
		postThread.start();
	}

	public void run() {

		try {
			inputStream = client.getInputStream();
			byte[] buffer = new byte[1024];
			System.out.println("beginnt zu lesen...");
			while ((readIn = inputStream.read(buffer)) != -1) {
				System.out.println(String.valueOf(readIn));
			}
			inputStream.close();

		} catch (IOException exc) {
			exc.printStackTrace();
		}
	}
}
 
Zuletzt bearbeitet:
Was ist denn dieses
Code:
bit
, wo du es speicherst?
Hast du dir schon die RFC durchgeguckt, wie ein POST aussieht?
 
Sorry, bit wäre eigentlich buffer , habs oben angepasst.
Jep, wenn ich es richtig verstanden habe, stehen die Informationen nicht in der URL drin.
 
Und was soll eigentlich die Ausgabe in der Schleife sein? Du ließt ja in den buffer. readIn gibt dir nur die Anzahl an.
 
Java:
private String readRequest() {
		try{
			StringBuffer requestBuffer = new StringBuffer();
			request = new Vector<StringBuffer>();
			inputStream = client.getInputStream();
			int readInPosition = 0;
			
			while ((readIn = inputStream.read()) != endOfFile){
				if (readIn == escNewLine && readInPosition == escNewLine){
					break;
				}
				else if (readIn != escCarriageReturn){
					readInPosition = readIn;
					requestBuffer.append((char) readIn);
				}
				else{
					request.addElement(requestBuffer);
					requestBuffer = new StringBuffer();
				}
			}
		}catch (IOException ioe) {
			ioe.printStackTrace();
		}
		for (int i = 0; i < request.size(); i++) {
			System.out.println(request.get(i).toString());
		}
			return request.elementAt(0).toString();
		
}

So: dass sollte eigentlich oben stehn...

Wenn ich mir den ganzen Request ausgeben lasse, erhalte ich alle Informationen bis auf die im Formular eingegebenen Daten... why?
 
Ich glaube mich noch wage daran zu erinnern, dass der Header von POST-Daten durch eine Leerzeile getrennt ist. Du brichst ja nach der Leerzeile ab.
 
Beim Post Request wird kein EOF gesendet. Wird versucht mehr Bytes zu lesen als gesendet wurden wird der InputStream blockieren.

Du kannst mittels
Code:
inputStream.available()
pruefen wieviele Bytes vorhanden sind und auslesen.

Java:
	int length = 0;
	while ((length = inputStream.available()) != 0) {
		readIn = inputStream.read(buffer, 0, Math.min(length, buffer.length)); 
		System.out.println(new String(buffer, 0, readIn));
	}
 

Zurück
Oben