Android-POST-Anforderung mit HttpURLConnection

Ich versuche, eine Post-Anfrage mit HttpURLConnection auszuführen, weiß aber nicht, wie ich das richtig machen soll.

Ich kann die Anfrage mit erfolgreich ausführenAndroidAsyncHttp Client mit folgendem Code:

AsyncHttpClient httpClient = new AsyncHttpClient();
httpClient.addHeader("Content-type", "application/json");
httpClient.setUserAgent("GYUserAgentAndroid");
String jsonParamsString = "{\"key\":\"value\"}";
RequestParams requestParams = new RequestParams("request", jsonParamsString);
httpClient.post("<server url>", requestParams, jsonHttpResponseHandler);

Dieselbe Anforderung kann mit curl auf dem Desktop-Computer ausgeführt werden:

curl -A "GYUserAgentAndroid" -d 'request={"key":"value"}' '<server url>'

Beide Methoden geben mir die erwartete Antwort vom Server.

Jetzt möchte ich die gleiche Anfrage mit HttpURLConnection machen. Das Problem ist, dass ich nicht weiß, wie ich es richtig machen soll. Ich habe so etwas ausprobiert:

URL url = new URL("<server url>");
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.setRequestProperty("User-Agent", "GYUserAgentAndroid");
httpUrlConnection.setRequestProperty("Content-Type", "application/json");
httpUrlConnection.setUseCaches (false);

DataOutputStream outputStream = new DataOutputStream(httpUrlConnection.getOutputStream());

// what should I write here to output stream to post params to server ?

outputStream.flush();
outputStream.close();

// get response
InputStream responseStream = new BufferedInputStream(httpUrlConnection.getInputStream());
BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream));
String line = "";
StringBuilder stringBuilder = new StringBuilder();
while ((line = responseStreamReader.readLine()) != null) {
    stringBuilder.append(line);
}
responseStreamReader.close();

String response = stringBuilder.toString();
JSONObject jsonResponse = new JSONObject(response);
// the response is not I'm expecting

return jsonResponse;

Wie schreibe ich die gleichen Daten wie in den Arbeitsbeispielen mit AsyncHttpClient und rolle sie in den HttpURLConnection-Ausgabestream?

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage