Curl not accepting spaces in script via variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Curl not accepting spaces in script via variables
# 1  
Old 09-16-2019
Curl not accepting spaces in script via variables

Hi All,


I'm trying to run a script which issues rest commands via curl to an endpoint. If I put spaces in fields via something like insomnia, it works, but when I try from an input file, it's failing with a json error.



Code:
while IFS=, read mname oname           <------ my input file is:    Test Name,New Name
do
#echo $mname
....

....


curl --request POST \
  --url http://192.168.0.1:1111/Service2/configuration/v1.0/Endpoint/ \
  --header 'authorization: Bearer '$token   \
  --header 'content-type: application/json' \
  --silent \
  --data '{
        -- "mName": "Test Name",                   <------with this line it works
        "mName": '\"$mname\"',             <-------with this line it fails

The output is

Code:
Test Name New Name

{"message":"JSON parse error","statusCode":400}

If I echo in from on curl, I get:


Code:
 --header content-type: application/json --silent --data {
       "mName": "Test Name",
        "oName": "New Name",

so it looks to be correct - just that without the echo, I get the error.



Any ideas?
# 2  
Old 09-16-2019
Most shells don't expand variables within single quotes. Try
Code:
"mName": "$mname",

# 3  
Old 09-16-2019
You may have missed the quote in data.

Code:
--data '{

If I remove that (and the quote at the end), and then put
Code:
"mName": "$mname",

I get
Code:
./addclients.sh: line 20: mName: command not found

:-(


I have to have the start/end single quote in the data element, and I need the double quotes around the $mname variable
# 4  
Old 09-16-2019
I've discovered a handy little tool called jq which can be used to build, display and manipulate JSON. If you are on Linux you can probably install it from the repository. Then you could change your curl invocation from
Code:
--data '{ 
...
}'

to
Code:
--data $(jq -nc --arg mName "$mname" --arg oName "$oname" '{ $mName, $oName }')

Note that the variables inside the braces are jq variables, rather than shell variables, and will expand into
Code:
{"mName":"Test Name","oName":"New Name"}

I hope this helps.

Andrew
# 5  
Old 09-16-2019
I'm trying - is there an alternative just in case that doesn't with with our admins?
# 6  
Old 09-16-2019
Code:
--data $(printf '{"mName":"%s","oName":"%s"}' "$mname" "$oname")

may work too. Notice how I've used single quotes for the format string to preserve the double quotes without escaping them.

If that does not work try using an interim variable that can be passed as the JSON string.

Andrew
# 7  
Old 09-16-2019
Code:
  --data $(printf '{
       "mName": "%s",
...
}
' "$mname")
================

{"message":"JSON parse error","statusCode":400}

:-(
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script accepting variables in valid number format

Hi Experts I would like to ask if there is a way to validate if the variable passed is in this kind of sample format "06-10" or "10-01". It was really a challenge to me on how to start and echnically the "6-10" stands for "June 10" and "10-01" stands as "October 1", overall it needs to have ... (3 Replies)
Discussion started by: ersan-poguita
3 Replies

2. Shell Programming and Scripting

HELP - loop a curl command with different variables from input file

Hi guys! Kind of new to bash scripting and now I'm stuck. I need to curl with these variables: "{ \"nodename\": \"$1\", \"ipaddress\": \"$2\", \"poolname\": \"$3\", \"port\": \"$4\", \"loadbalancer\" : \"$5\" }" and my input_file.txt contains server001 10.10.10.01 serverpool1 80... (4 Replies)
Discussion started by: yort
4 Replies

3. Shell Programming and Scripting

Sending awk variables into curl in a bash script

Hello experts! I have a file1 with the following format (yr,day, month, hour,minute): 201201132435 201202141210 201304132030 201410100110 ... What i want to do is to assign variables and then use them in the curl command to download the text of each event from a web page. What I have... (6 Replies)
Discussion started by: phaethon
6 Replies

4. Shell Programming and Scripting

Spaces in variables

I'm having a problem with this.... --------------------------------------------------- #!/bin/bash SPKTAG=" | festival --tts" echo "Welcome to my shell program" "$SPKTAG"; --------------------------------------------------- I have a variable call SPKTAG " | festival --tts" and I... (2 Replies)
Discussion started by: digitalviking
2 Replies

5. Shell Programming and Scripting

script accepting password

Hi friends, I am very new to Unix scripting and having some difficulty in my first shell script. I have written a simple shell script to upload an artifact to a remote machine on the network. echo "Uploading the artifact" scp app.war username@remotemochine.domainname.net:/home/deployables... (3 Replies)
Discussion started by: prashdeep
3 Replies

6. Shell Programming and Scripting

cURL and variables

I have a spent a day with Google trying to figure this one out and have decided its time to ask the experts... I'm running OS X 10.6 I need to use cURL to FTP a file. I have been successful send the file from the command line when I know the filename. My problem is that the filename changes... (2 Replies)
Discussion started by: fmSimplicity
2 Replies

7. Shell Programming and Scripting

Passing variables to cli curl

I have a script that uses cli curl, and it would be easier if it was possible to pass variables like this: curl -c $cookie -d $data www.********.comThis doesn't work, instead I have to generate a string and use eval. Is there another, easier way to pass variables to cli curl? (1 Reply)
Discussion started by: locoroco
1 Replies

8. Shell Programming and Scripting

Spaces in Lines for Variables

All, I am driving myself crazy over this one. I have run a find command against a volume on a nas. That returns a full listing of path and file name. This is an example of one line of output. I redirected the output of the find command to a file. ... (4 Replies)
Discussion started by: bubbwe
4 Replies

9. Shell Programming and Scripting

invloking another script accepting input

hi I am trying to invoke another application script from my script like --------------------------- main . . ./new appl <<EOF Input 1 Input 2 EOF . . exit ------------------------ But is exits the new application after input command 2, I want that it should not exit and accept... (1 Reply)
Discussion started by: ashish_uiit
1 Replies

10. UNIX for Dummies Questions & Answers

removing spaces from variables?

I stored results like this VAR=`wc -l < ls.txt` But the value of the wc gave me a padded number. How do I strip the padding from $VAR? Do you think I could use SED? Except instead of a file input, have a variable redirection input? (2 Replies)
Discussion started by: yongho
2 Replies
Login or Register to Ask a Question