Żądanie Android POST przy użyciu HttpURLConnection

Próbuję wykonać żądanie po użyciu HttpURLConnection, ale nie wiem, jak to zrobić poprawnie.

Mogę pomyślnie wykonać żądanie za pomocąAndroidAsyncHttp klient używający następującego kodu:

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);

To samo żądanie można wykonać za pomocą zwijania na komputerze stacjonarnym:

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

Obie te metody dają oczekiwaną odpowiedź od serwera.

Teraz chcę wykonać to samo żądanie za pomocą HttpURLConnection. Problem polega na tym, że nie wiem, jak to zrobić poprawnie. Próbowałem czegoś takiego:

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;

Jak poprawnie zapisać te same dane, co w przykładach roboczych z AsyncHttpClient i zawinąć do strumienia wyjściowego HttpURLConnection?

Z góry dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion