totale HTTP/1.0 Verwirrung bei POST

  • Themenstarter Themenstarter BoulderDash
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BoulderDash

Gast
Hallo Zusammen,

ich möchte gerne eine größere Menge Daten von einem Applet per POST an ein PHP-Script senden.

Der von mir verwendete Code funktioniert bis zu einer bestimmten Datenmenge ohne Probleme. Handelt es sich jedoch mal um zu viel Daten (irgendwo ab 350kb) erhalte ich vom Server den Fehler "400".

Ich habe dann mal versucht mich in die HTTP-Materie einzulesen, aber das Chaos ist einfach zu groß.

Ich könnte mir vorstellen, dass es daran liegt, dass meine Daten nicht in Chunks gesendet werden, etwas mit Content-Length nicht stimmt oder dass ich einen TimeOut erhalte ...

Weitere Infos:
HTTP/1.0 (keine Ahnung, warum Java bei mir nicht HTTP/1.1 verwendet)
JDK 1.1.8 (MRJ 2.2.5)


Vielen Dank im Voraus für Eure Hilfe!

Code:
public String postData(String myData, String myURL) {
		
		InputStreamReader  inStream = null;
		OutputStreamWriter outStream = null;
		BufferedReader buff = null;
		
		try {
			String agent = "DATAform 1.0 beta";
        	String type = "multipart/form-data; boundary=AaB03x";
  	
       	
        	URL url = new URL(myURL);
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			
			conn.setRequestMethod("POST");
						
			conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            
            conn.setRequestProperty("User-Agent", agent);
    		conn.setRequestProperty("Content-Type", type);
    		                        
    		outStream = new OutputStreamWriter(conn.getOutputStream());
            outStream.write("--AaB03x\r\nContent-Disposition: form-data; name=\"dfFile\"; filename=\"dfText.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\nContent-Length: " + myData.length() + "\r\n\r\n" + myData + "\r\n--AaB03x--");
            outStream.close();
    		
            int HTTPCode = conn.getResponseCode();
           
	}
catch( IOException e ){
			// handle the error here
		}
}
 
Vielen Dank Bleiglanz,
so macht es echt Spaß mal um Rat zu fragen!

Ein PHP-Timeout wirft kein HTTP-Response 400, oder? Ich dachte eher an einen Timeout in der HTTP-Verbindung oder ähnliches. Ich habe schließlich auch nach einem Java-Problem und nicht nach einem PHP-Problem gefragt.
 
na ja, wenns erst ab einer gewissen grösse nicht geht??

ausserdem willst du scheinbar einen file-upload simulieren, lieg ich da richtig?

Das ist schon ein etwas speziellerer POST 🙂

und du schickst einen string als binary-daten, das geht so eigentlich nicht; bist du sicher dass das ganze bei kleineren daten problemlos funktioniert??

Was machste eigentlich, wenn dein String "AaB03x" enthält??

ggf. würde ich die jakarta commons HttpClient Bibliothek verwenden

oder zumindest die sourcen in org.apache.commons.httpclient.methods.multipart.*
mal durchschauen
 
Das Dickicht löst sich etwas ...

Folgende Sachlage:
- das senden eines Files mit HTTP POST funktioniert reibungslos
- der Fehler (400 Bad Request) tritt bei Character-Streams (zwei Bytes) über 400kb auf
- Byte-Streams funktionieren wunderbar

Nun würde ich ja einfach Bytes streamen, aber leider zerlegt mir das meine Zeichen.
ASCII 166 wird z.B. im Byte als -90 abgebildet. Und ASCII -90 ist dann natürlich egal wo es ankommt Schrott ...

Stellt sich immernoch die Frage, warum mir Charakter-Streams ab einer gewissen menge abranzen und vor allem wesentlich langsamer sind als Byte-Streams.
 
nein, ASCII -90 ist schon OK 🙂 denk mal drüber nach

wenn du einen String hast und diesen in einen Writer steckst, dann wird der AUTOMATISCH mit einem Default-Encoding der Plattform in einen gewissen Zeichensatz dekodiert (damit bytes draus werden)

so gehts wahrscheinlich nicht, weil HTTP da nix mit anfangen kann
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben