Send form-urlencoded with cURL in Kotlin

Paste a curl command that sends form-urlencoded and get idiomatic Kotlin code. We pick the right serialization for OkHttp and set the correct Content-Type.

Quick answer

To convert a cURL command to Kotlin, paste it into the Toolpaper workbench below. It parses the command in your browser and emits idiomatic Kotlin code — headers, query string, request body, authentication (Bearer, Basic, API key), and cookies are all wired up automatically. No data is uploaded; conversion is fully client-side.

Prefer a different target? See the full cURL to Kotlin reference, or jump to the same guide in JavaScript, Node.js, or Python.

InputcURL command
MethodPOST·Headers1·Body30 B· Chars 139
OutputJVM · OkHttp / Kotlin(idiomatic)
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody

val client = OkHttpClient.Builder().followRedirects(false).followSslRedirects(false).build()
val body = "username=ada&password=lovelace".toRequestBody("application/x-www-form-urlencoded".toMediaTypeOrNull())
val request = Request.Builder()
  .url("https://api.example.com/login")
  .method("POST", body)
  .header("Content-Type", "application/x-www-form-urlencoded")
  .build()

client.newCall(request).execute().use { response ->
  println(response.body?.string())
}
Inspect

Example

A representative curl command for this scenario. Paste your own above to convert an exact match.

curl input
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=ada&password=lovelace"

Implementation notes

  • Content-Type is detected from -H headers first, then inferred from the body shape when the header is missing.
  • application/x-www-form-urlencoded bodies are decoded into structured pairs so OkHttp owns the encoding — you never double-encode a value.
  • Charset directives on Content-Type (e.g. application/json; charset=utf-8) survive the round trip.

Common mistakes

  • Setting Content-Type manually and then also using OkHttp's helper — you end up with duplicate headers or the wrong one wins.
  • Mixing form encoding with JSON headers — the server rejects with 400 and it's easy to miss in code review.
  • Trusting the browser DevTools "Copy as cURL" to preserve charset — it often drops it. Clean panel restores common defaults.

Common questions

How is form-urlencoded encoded in the generated Kotlin?
application/x-www-form-urlencoded bodies map to the right primitive in each language — data= in Python, url.Values in Go, FormUrlEncodedContent in C#.
Does it preserve Content-Type?
Yes. The Content-Type header is honored and matched against the body so serialization stays consistent.
Is anything uploaded?
No. Parsing and generation happen entirely in your browser.

More payload types in Kotlin

Kotlin hub →

The same guide in other languages

All guides →

Full Kotlin reference on the cURL to Kotlin hub, or open the main converter for all 18 targets.