'How to send double quote in -d parameter for curl.exe?

How can I send a double quote char using curl.exe in the -d parameter. I don't want to URL encode the double quote. Since the -d data needs to be surrounded in double quotes, I cannot seem to get it to work.

Or is there another flag for curl.exe that tells it to use a files contents for the whole form post data?



Solution 1:[1]

My curl.exe works with this form:

-d "{\"param\":\"value\"}"

i.e. doublequotes around data, and doublequotes masked with backslash inside

Solution 2:[2]

For the escaping of double quote question, I'm finding that tripling the doublequotes works from the shell:

curl -d {"""foo""":"""bar"""}

while doubling the doublequotes works from within a batch file:

curl -d {""foo"":""bar""}

Which is quite annoying for testing in the shell first.

Solution 3:[3]

You can surround the data with single quotes and use double quotes inside.

Example in PowerShell

curl.exe https://httpbin.org/anything `
    -H 'Content-Type: application/json' `
    -d '{ "this": "is proper json" }'.Replace('"', '""')

Please note that cURL is built into Windows 10, but PowerShell shadows it with an alias, so you have to use curl.exe

Solution 4:[4]

If you are doing this in Powershell, you will need to quote the whole text block with single quotes and still escape the quotes. i.e. -d '{\"param\":\"value\"}'

Tested on Win11 VSCode Powershell 7 terminal

Solution 5:[5]

There is something called dollar slashy string.

def cmd = $/ curl -d '{"param":"value"}' -X POST https://example.com/service /$
sh cmd

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 Simon East
Solution 2
Solution 3 Gian Marco
Solution 4
Solution 5 Anand Rockzz