HttpURLConnection mit vielen Parametern

franzy

Aktives Mitglied
Hallo zusammen,

ich baue über eine Anwendung eine Request über HttpURLConnection zu einem Servlet auf. In dem Request gebe ich Parameter mit als GET.
Das Funktioniert auch wunderbar in den meisten Fällen. Ich bekomme den Response 200.

In einem Fall ist es so, dass hier sehr viele Parameter mitgegeben werden. Der Parameter String ist über 8000 Zeichen lang.
Ich hatte gedacht ich versuche es dann mit POST, aber das Ergebnis ist immer gleich:
Exception: java.net.SocketException: Connection reset

Hier mal Code als Beispiel.
Der Parameter String query sieht so ähnlich aus. Ich kann jetzt nicht den ganzen String mit mehr als 8000 Zeichen posten und anonymisieren:
Java:
StringBuilder query = TODO=REGISTER&BERECHTIGUNG=I&AKTION=K&P1=N&MODUL=OFFICE&P2=test&p3=-&BERECHTIGUNG=Y&AKTION=K&P1=L&MODUL=OFFICE&P2=test2&p3=-......

Den Aufbau der HTTPCon führe ich so aus:
Java:
URI uri = new URI(new URI("http://abc").getScheme(), new URI("http://abc").getAuthority(), new URI("http://abc").getPath(), query.toString(), null);
                                    
HttpURLConnection httpConnection = (HttpURLConnection) uri.toURL().openConnection();
httpConnection.setDoInput(true);
httpConnection.setDoOutput(false);
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("User-Agent", "Mozilla/5.0");

int responseCode = httpConnection.getResponseCode();

if (responseCode == HttpURLConnection.HTTP_OK) // success
{
    ....
}

Der Request kommt gar nicht beim Servlet an. Dort wird nämlich die Methode gar nicht angesprungen.
Es muss mit der Menge an Parametern zu tun haben, weil es ja bei einer geringeren Anzahl, die mir nicht bekannt ist, funktioniert.

Ich hätte jetzt gedacht wenn ich POST sage dann ist die Stringlänge der Parameter egal, aber ist leider nicht so.

Hat jemand eine Idee?

Grüße und Danke franzy
 
Hast du nur von GET auf POST geändert? Du müsstest natürlich die Parameter auch von der URL in den Body verschieben, wenn du das ändern willst.
 
sorry, hab es hinbekommen. Anbei der Code:

Java:
byte[] postData = query.toString().getBytes();

httpConnection = (HttpURLConnection) new URL( "http://abc").openConnection();
httpConnection.setDoInput(true);
httpConnection.setDoOutput(true);
httpConnection.setRequestMethod("POST");
httpConnection.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
httpConnection.setRequestProperty( "Content-Length", Integer.toString( postData.length ));

DataOutputStream wr = new DataOutputStream( httpConnection.getOutputStream());
wr.write(postData);                           

int responseCode = httpConnection.getResponseCode();
 

Zurück
Oben