Home > Mobile >  I need to pass json-data to api with special characters
I need to pass json-data to api with special characters

Time:11-04

I am trying to push some data to my Tiddlywiki via api so I can create a new tiddler. I can pass almost all the data, but if the value "text" has spaces inside it breaks the curl command trying to pass multiple urls.

This is the actual command:

curl -X PUT -i "http://192.168.1.166:8080/recipes/default/tiddlers/$title" -H "X-Requested-With: TiddlyWiki" --data $(jq -nc --arg tags "$tag" --arg text "'${content}'" '{ $tags, $text }')

I tried at first using $variables, inside brackets, even inside multiple "'"$var"'" following others questions here. But most of them quickly recommended using jq so I gave it a try.

I learned how to create some keys with the bash¡s variables contents, and If I pipe all of this I can get it to work only if I replace spaces with other characters...I tried or scaping the space \ with sed whitout success. ( is replaced literally so not helpful)

Any recommendations at all, I will follow any other path you could bring to it.

Thanks.

EDIT: I tried using --data-urlencode "text=${var}" but it wasnt filled, only variable expanded was the title. The others didnt show at all.

API'S INFO: https://tiddlywiki.com/static/WebServer%20API%3A%20Put%20Tiddler.html

I forgot to mention that I am using zsh shell...

CodePudding user response:

You need to quote the output of the command substitution: --data "$(jq ...)". Without this, curl thinks the words after the first one are individual URLs to connect to. You should also remove the single quotes from --arg text "'${content}'", otherwise they'll be added to the text itself.

  • Related