suspend fun doPostRequest()

in WearOAuth/util/src/main/java/com/example/android/wearable/oauth/util/Requests.kt [35:66]


suspend fun doPostRequest(
    url: String,
    params: Map<String, String>,
    dispatcher: CoroutineDispatcher = Dispatchers.IO
): JSONObject {
    return withContext(dispatcher) {
        val conn = (URL(url).openConnection() as HttpURLConnection)
        val postData = StringBuilder()
        for ((key, value) in params) {
            if (postData.isNotEmpty()) postData.append('&')
            postData.append(URLEncoder.encode(key, "UTF-8"))
            postData.append('=')
            postData.append(URLEncoder.encode(value, "UTF-8"))
        }
        val postDataBytes = postData.toString().toByteArray(charset("UTF-8"))

        conn.apply {
            requestMethod = "POST"
            setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
            setRequestProperty("Content-Length", postDataBytes.size.toString())
            doOutput = true
            outputStream.write(postDataBytes)
        }

        val inputReader = BufferedReader(InputStreamReader(conn.inputStream, "UTF-8"))
        val response = inputReader.readText()

        Log.d("PostRequestUtil", "Response: $response")

        JSONObject(response)
    }
}