34

I would like to POST (send) some form data to a webserver using cURL on a terminal-prompt.

This is what I got so far:

curl --data-ascii "content=derinhält&date=asdf" http://myserverurl.com/api/v1/somemethod

The problem is that the umlaute ("äöü") are replaced by "?" when I receive the post request on the server.

I think I need to use an UTF-8 encoding for the POST request.

Does anybody know how I can achieve this?

ashiaka
  • 3,994
  • 8
  • 32
  • 45

1 Answers1

44

You CAN use UTF-8 in the POST request, all you need is to specify the charset in your request.

You should use this request:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" --data-ascii "content=derinhält&date=asdf" http://myserverurl.com/api/v1/somemethod
timothymctim
  • 205
  • 1
  • 9
Kirill Smirnov
  • 1,452
  • 2
  • 21
  • 28
  • 7
    Specifying a "urlencoded" Content-Type with non-URL-encoded content seems wrong to me. Rather use `--data-urlencode` and in case the text is not UTF-8 encoded, you can use `"content=$(echo -n "derinhält" | iconv -f ISO-8859-1 -t UTF-8)"` – rudi Dec 09 '19 at 13:30
  • I just experienced that at least certain server-side frameworks like the Java/Scala Play framework expects the "Charset" with an upper case "C", otherwise they do not detect the encoding. So, it must be `curl -X POST -H "Content-Type: application/x-www-form-urlencoded; Charset=utf-8"...` – Dirk Hillbrecht Feb 27 '23 at 08:44