'How to send JSON file as part of request body in CURL POST command
I am using CURL command line to send HTTP POST to a web service. I want to include a file's contents as a PART of the body of the POST command. Is this possible? I know I can send a file as the entire body as answered here. But I only want a part of the body to be the content of the file.
For example
curl -d '{ "name": "rahul", "speed": "fast", "data": { "number": 1, "letter": "abd", "letter2": "efg"} }' 'http://...'
Here I only want data
as the file's content. Not the entire body. How can I do this?
Solution 1:[1]
Set a variable to contain the file contents:
data=$(cat /path/to/file)
then substitute it into the JSON:
curl -d '{ "name": "rahul", "speed": "fast", "data": "'$data'" }' 'http://...'
Solution 2:[2]
You accepted @Barmar's answer, but for anyone reading this, @Barmar switched the double- and single-quotes, which will cause the command to not work as intended.
The following works:
data="$(cat filename)" && \
curl -d '{ "name": "rahul", "speed": "fast", "data": "'$data'" }' 'http://...'
Notice that the $data
variable is surrounded by single-quotes first, then double-quotes.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | WolfSovereign |
Solution 2 | tekknolagi |