Java POST an PHP und lesen

Pharadox

Mitglied
Hallo,

wenn ich Daten an ein PHP Script sende, und mir dieses irgendwelche Zeichen mit echo ausgibt, hängt folgendes Script immer ein ? an die Zeichenkette mit dran.

Ich vermute, dass es an/in der while-Schleife liegt, welche an incoming immer ein Char dranhängt...

Mein Quellcode:

Java:
package de.tests;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class dbreadandwrite {
	private URL sitepath;
	private URLConnection con;
	
	public dbreadandwrite(URL sitepath) {
		this.sitepath = sitepath;
	}
	
	public void setSitePath(URL sitepath) {
		this.sitepath = sitepath;
	}
	
	public URL getSitePath() {
		return this.sitepath;
	}
	
	public void send(String data) throws IOException {
		if (this.con == null) {
			this.con = this.sitepath.openConnection();
		}
		if (this.con.getDoOutput() == false) {
			this.con.setDoOutput(true);
		}
		OutputStream out = this.con.getOutputStream();
		out.write(data.getBytes());
		out.flush();
	}
	
	public String read() throws IOException {
		if (this.con == null) {
			this.con = this.sitepath.openConnection();
		}
		InputStream in = this.con.getInputStream();
		int c = 0;
		StringBuffer incoming = new StringBuffer();
		while (c >= 0) {
			c = in.read();
			incoming.append((char) c);
		}
		return incoming.toString();
	}
	
	public static void main(String[] args) {
		try {
			URL url = new URL("http://localhost/test.php");
			dbreadandwrite con = new dbreadandwrite(url);
			try {
				con.send("foo=bar");
				System.out.println(con.read());
			} catch (IOException e) {
				System.out.println(e);
			}
		} catch (MalformedURLException e) {
			System.out.println(e);
		}
	}
}


Vllt. erkennt jemand das Problem auf anhieb? Ich komm nicht drauf...


Danke!

Gruß
 
Kleine Vermutung: du machst ja in der while-Schleife ein
Code:
in.read()
, das liefert dir ein int, das ein byte repräsentieren soll, aber du castest es auf ein char. Vielleicht ist das schon problematisch? Versuch mal das int in ein byte zu casten, und diese bytes dann zu sammeln (oder gleich ein byte-Array mit
Code:
in.read(byte[])
befüllen) und dann das
Code:
new String(byte[])
zu machen.
 
Du liest c ein, hängst ihn an, aber dann schaust du erst, ob er größer null ist. So wird ein negativer char einmal angehängt.

Also besser
Java:
while ((c = in.read()) >= 0)
 
Ich meinte, du liest jedes Byte einzeln aus, anstatt gleich eine Menge von Bytes auf einmal auszulesen:

Java:
InputStream in = ...
byte[] buffer = new byte[256]; // Oder auch 1024...
StringBuilder sb = ...
while(in.read(buffer)!=-1){
  // hier etwas mit den 256 eingelesenen Bytes im Array buffer machen.
  sb.append(new String(buffer));
  // Achtung, beim letzten Durchlauf ist das Array evtl. nicht komplett mit bytes gefüllt
}

Das geht halt etwas schneller, als die Daten byte für byte auszulesen 😉 Aber dein Fehler mit dem ? wird ja mit frostbytes Vorschlag gut gelöst.
 

Zurück
Oben