Multiline curl command
Solution 1
For Linux and MacOS: Use the \
escape character:
curl "http://WEBSITE" -H "Host: WEBSITE" \
-H "Accept: text/html,application/xhtml+xml \
,application/xml;q=0.9,*/*;q=0.8"
For Windows: Use the ^
escape character:
curl "http://WEBSITE" -H "Host: WEBSITE" ^
-H "Accept: text/html,application/xhtml+xml ^
,application/xml;q=0.9,*/*;q=0.8"
Solution 2
NOTE: watch out for the tendency to indent on multiple line commands, as it will embed spaces and screw up the curl command. the sed command replaces embedded spaces within the variables with the %20 string so that spaces can be used embedded in the strings you pass as variables
messageout="The rain in Spain stays mainly in the plains"
summaryout="This is a test record"
alertnameout="Test Alert"
curl -v -silent request POST "URL.com?\
summary=`echo $summaryout | sed -e 's/ /%20/g'`&\
alertname=`echo $alertnameout | sed -e 's/ /%20/g'`&\
message=`echo $messageout | sed -e 's/ /%20/g'`"
Solution 3
The Windows equivalent to \
is ^
.
Solution 4
If you are running Windows, I have found it easier to install Git and use Git Bash to run Curl. This was initially suggested in a separate article: https://stackoverflow.com/a/57567112/5636865.
Related videos on Youtube
Comments
-
Bijan almost 3 years
I am trying to modify a curl request that was captured with Google Chrome Dev Tools.
Here is what the command looks like
curl "http://WEBSITE" -H "Host: WEBSITE" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: en-US,en;q=0.5" --compressed -H "Content-Type: multipart/form-data; boundary=---------------------------1184875127259" --data-binary "-----------------------------1184875127259"^ "Content-Disposition: form-data; name=""FORM1"""^ "FORM1DATA"^ "-----------------------------1184875127259"^ "Content-Disposition: form-data; name=""FORM2"""^ "FORM2DATA"^ "-----------------------------1184875127259"^ "Content-Disposition: form-data; name=""FORM3"""^ "FORM3DATA"^ "-----------------------------1184875127259"^ "Content-Disposition: form-data; name=""embed"""^ "true"^ "---------------------------1184875127259--"^ ""
Form#
is the name of the form andForm#Data
is the data I submitted in the forms.How would I make this be a single line curl request I can just copy into my command line and have it do the same thing that my browser did?
-
Saini Arun over 5 years@DirkSchumacher, Instead of using \ for line escaping use ^ in windows. Back slash is for macOs.
-
Dirk Schumacher over 5 years@saini-arun : good hint!-) Thank you! Could have solved it by myself with little more cells in my brain... I just reflect for me that it is always good to share basic settings if I am aware that environmental issues could be considered.
-
Raghav about 4 yearsFor Windows, you can use caret (^) as suggested above. Example: curl -H "X-Auth-Token: 9HqLlyZOugoStsXCUfD_0YdwnNnunAJF8V47U3QHXSq" ^ -H "X-User-Id: aobEdbYhXfu5hkeqG" ^ -H "Content-type:application/json" ^ -d '{"avatarUrl": "domain.tld/to/my/own/avatar.jpg"}' ^ localhost:3000/api/v1/users.setAvatar
-
Dave Kidder almost 4 yearsNote that if attempting to import a cURL request in as "Raw Text" in Postman, use Copy >> "Copy as cURL (bash)" in Chrome Dev Tools to get the request in the format that Postman expects. "Copy as cURL (cmd)" uses the format that includes the ^ as line separator and Postman will throw an error reading: "Error while importing Curl: Only the URL can be provided without an option preceding it. All other inputs must be specified via options."
-
Alfredo G Marquez over 3 yearsI agree! Git Bash is the awesome when you are on Windows.