HttpURLConnection POST splittet Daten in zwei Pakete

Status
Nicht offen für weitere Antworten.
Servus zusammen!

Wieder mal hänge ich an einem Punkt und denke, das kann's nicht sein. Eigentlich ist alles klar, es will aber trotzdem nicht:

Ich möchte eine Web-Applikation über ein Java Programm ansteuern. Nehme mir die URL, hole die HttpURLConnection. Da werden ein paar Properties gesetzt und dann über den Stream die eigentlichen Daten gepostet... Klappt aber nicht, der Server meldet sich zwar, hat aber die Anfrage nicht wirklich verstanden.

Darafhin hab ich mir den Verkehr (Netzwerk! ;) ) mal mit Wireshark angeschaut und mit einem Firefox verglichen, weil der kann es ja. Weitestgehend sind die beiden Konversationen gleich, der signifikanteste (in meinen Augen) Unterschied ist, dass mein Java lediglich die Properties wegschickt; das endet mit der Länge der POST Infos. Dann ist das Paket zu Ende. Die Post Daten kommen erst im nächsten Paket. Längenmässig wäre das alles kein Problem zusammen zu schicken.

Nun meine Fragen:
- Kann das tatsächlich die Ursache sein?
- Oder sollte / muss das TCP/IP/HTTP Protokoll das transparent handeln und der Server weiss gar nicht, dass es zwei Pakete waren?
- Kann man das in der HttpURLConnection irgendwo einstellen???
- Warum tut mein Java das (bäh)? ;)

Irgendwelche Anregungen?

Danke,
Stephan
 
T

tuxedo

Gast
Wie groß (bytes bzw kbytes) sind denn deine Properties? Bin was HTTP anbelangt auch nicht sonderlich fit. Aber vllt. läuft der Sende-Puffer voll, so dass er deshalb ein zweites Paket draus macht. Allerdings wüsste ich jetzt auch nicht wie man das bei HttpUrlConnection ändern könnte.

Auf der anderen Seite: Der Server sollte alles entgegen nehmen was er bekommt. Irgendwo wird ja im Header auch stehen wieviel er bekommt, bzw. wann er alles erhalten hat, um daraufhin die Antwort zu formulieren.

- Alex
 
Danke für die schnelle Reaktion,

aber ich fürchte das bringt uns noch nicht weiter; testweise habe ich auch schon probiert bis auf eines, alle Properties rauszuwerfen und auch den Inhalt bis auf einen Placebo zu kürzen; nur um rauszufinden, ob es an irgendwelchen Längen liegt. Aber selbst wenn beide Pakete zusammen deutlich kürzer sind als z.B. das, was vom Firefox versendet wird, macht Java ZWEI Pakete daraus.

Stephan
 

musiKk

Top Contributor
Klingt verrückt. Allerdings wird das ohne Code etwas schwierig. Vielleicht könnte auch der Trace helfen.
 
G

Gelöschtes Mitglied 5909

Gast
probier alternativ mal den Apache Commons HTTPClient aus oder versende die raw daten über ein Socket

Aber imo sollte es kein Unterschied machen wie viele Packete das sind, es wird (wie vorher schon gesagt) eher was am Header kaputt sein.
 
Ok, der Code ist definitiv noch quick-n-dirty, aber solange es nicht läuft mach ich mir da auch noch nicht wirklich Gedanken drum... Hoffe ihr findet durch. :cool:

[HIGHLIGHT="Java"]
private static Vector doRetrieve(String method, String url, Vector data, String data2) {
String str = "";
BufferedReader in;
PrintWriter out;
BufferedWriter bufferedWriter;
Vector res = new Vector();
URL url2;
HttpURLConnection con;

try {
if (data == null) {
Track.track("doRetrieve(" + method + ", " + url + ", null) called");
} else {
Track.track("doRetrieve(" + method + ", " + url + ", Vector(" + data.size() + ") called");
}
url2 = new URL(url);

con = (HttpURLConnection) url2.openConnection();
if ( data != null || data2 != null )
con.setDoOutput( true );
con.setRequestMethod(method);

con.setRequestProperty( "Host", "www.mix-max.de" );
con.setRequestProperty( "User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1 .9.0.7) Gecko/20 09021910 Firefox /3.0.7" );
con.setRequestProperty( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" );
con.setRequestProperty( "Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" );
con.setRequestProperty( "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q =0.7" );
con.setRequestProperty( "Keep-Alive", "300" );
con.setRequestProperty( "Connection", "keep-alive" );
con.setRequestProperty( "Referer", "http://www.mix-max.de/" );

if (data != null) {
out = new PrintWriter(con.getOutputStream(), true);
for (int a = 0; a < data.size(); a++) {
out.print( (String) data.get(a) );
}
out.close();
}
if ( data2 != null ) {
bufferedWriter = new BufferedWriter( new OutputStreamWriter( con.getOutputStream() ) );
bufferedWriter.write( data2 );
bufferedWriter.close();
}
con.connect();

in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while (str != null) {
str = in.readLine();
if ( res.size() == 0 ) Track.track( str );
if ( str != null ) res.add(str);
}
Track.track("Read " + res.size() + " lines of text as answer");

in.close();
con.disconnect();
return res;
} catch ...
}
[/HIGHLIGHT]

Das Objekt "Track" ist ein etwas komfortableres System.out.println. Das hab ich noch nicht gegen log4j ersetzt; stammt noch aus den Anfängen meiner Entwicklung in dieser Richtung.

M.E. sieht das alles so aus, wie es zig andere auch machen - und da scheint es ja zu klappen. Oder hab ich doch irgendwo ein Komma oder ähnlichen Fliegenschiss übersehen? ;)

Auf die Idee, mehr Richtung low level zu gehen bin ich auch schon gekommen - aber irgendwie mag ich nicht so recht, weil ich damit ja auch die "Dienstleistung" des high level verliere und nachprogrammiere. Üblicherweise gehe ich auch bei Fehlern davon aus, dass jene in MEINEM Code liegt und eben NICHT im jdk... deshalb müsste es ja auch irgendwie sauber hinzubekommen sein...

Stephan
 

musiKk

Top Contributor
Hm, keine Ahnung. Mit einem GET funktionierts. Mit einem POST krieg ich eine 500, weil ich nicht weiß, was ich da hinschicken muss. Aber der Request wird als ein Paket verschickt.
 
??? In einem Paket... Hast du vermutlich auch mit sowas wie Wireshark angeschaut? Mit genau dem Code? Keine Ahnung, woran das dann noch liegen kann... Ich arbeite mittlerweile mit jdk 1.6.0_11, könnte das ein Grund sein? Nu weiss ich echt nimmer weiter. :-(
 

musiKk

Top Contributor
Nun, ich habe natürlich alles, was ich nicht zuordnen konnte, rausgeworfen. Das meiste sind ja Methodenparameter. Von daher kann mein Testfall natürlich unzutreffend sein.
 
Kurzes Update:

Nach weiterem Probieren bin ich nicht wirklich weiter gekommen. Allerdings habe ich festgestellt, dass die Webseite, die ich für den Test verwendet habe auch bei sehr, sehr genau nachgebildetem Request diesen nicht versteht. Woran das liegt, kann ich nicht feststellen.

Mittlerweile habe ich meine Anstrengungen tatsächlich auf Suns HttpClient umgeleitet. Dort habe ich es mit einer anderen Seite zumindest hinbekommen. Der Datenaustausch funktioniert (rudimentär) und der Request wird tatsächlich in einem einzigen Paket geschickt. Das war mir mit der Standard HttpURLConnection nicht mehr gelungen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
E HTTP HttpURLConnection & Javascript Netzwerkprogrammierung 2
A HTTP HttpURLConnection wiederverwenden? Netzwerkprogrammierung 2
T HttpURLConnection Netzwerkprogrammierung 6
T Ladezeit einer Seite mit HttpURLConnection und Bildern Netzwerkprogrammierung 2
J HttpURLConnection ResponseCode 403 Netzwerkprogrammierung 2
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
M HttpURLConnection und Proxy Netzwerkprogrammierung 2
D Hilfe, meine HttpURLConnection hängt manchmal. Netzwerkprogrammierung 9
F HttpURLConnection überschreiben Netzwerkprogrammierung 2
W Problem mit HttpURLConnection Netzwerkprogrammierung 2
W HttpURLConnection-Wikipedia Netzwerkprogrammierung 15
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
G Redirects einer HttpURLConnection ermitteln Netzwerkprogrammierung 4
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
O HTTP Bilderübergabe per POST Netzwerkprogrammierung 1
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
N Post u Head Request an Server Netzwerkprogrammierung 4
F HTTP POST - "Already connected" Netzwerkprogrammierung 0
C Android: Json-POST Request zu REST Webservice Netzwerkprogrammierung 2
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
R HTTP Post HTML Netzwerkprogrammierung 5
S HTTP Probleme mit POST-Befehl Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
B Post Request in Java Netzwerkprogrammierung 11
C HTTP POST Connect Netzwerkprogrammierung 9
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
T HTTP POST Request Netzwerkprogrammierung 3
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
ARadauer POST Request absetzen.. Netzwerkprogrammierung 3
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
T HttpClient - Senden via Post Netzwerkprogrammierung 12
hdi POST Request (HttpConnection) Netzwerkprogrammierung 6
M Http POST liefert kryptischen Content Netzwerkprogrammierung 4
F POST-Daten sende Netzwerkprogrammierung 3
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
J 403 error bei POST request Netzwerkprogrammierung 3
J Post-Daten an URL schicken Netzwerkprogrammierung 2
E upload progress bei einem http file post Netzwerkprogrammierung 5
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
E In Webseite einloggen/ GET, POST an PHP-Script übergeben Netzwerkprogrammierung 2
B totale HTTP/1.0 Verwirrung bei POST Netzwerkprogrammierung 5
U Webformular ausfüllen ( Post ) Netzwerkprogrammierung 7
S object via post auf servlet send und weiter bearbeiten Netzwerkprogrammierung 11
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
O Per POST automatisch auf Website einloggen... Netzwerkprogrammierung 9
C POST-Parameter aus HTML-Script lesen Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben