Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.5.0+

curl with Variable Substitution in a JSON Request Body

See more CURL Examples

This example shows how to use variables inside a JSON request body using the {{variable_name}} syntax. When the HTTP request’s Content-Type indicates JSON, Chilkat automatically applies proper JSON escaping to each substituted value, ensuring the resulting JSON remains valid.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- Variable names are enclosed between {{ and }}
-- Important: The variable {{var_name}} should be placed inside the quotes.

-- This is correct:
-- curl -X POST https://api.example.com/messages \
--   -H "Content-Type: application/json" \
--   -d '{"text":"{{message}}"}'

-- This is incorrect:
--   -d '{"text":{{message}}}'

local sbCurl = chilkat.StringBuilder.new()
sbCurl:append_ln("curl -X POST https://api.example.com/messages \\")
sbCurl:append_ln("  -H \"Content-Type: application/json\" \\")
sbCurl:append_ln("  -d '{\"text\":\"{{message}}\"}'")

local curl = chilkat.HttpCurl.new()

-- In this example, the value we'll provide for the "message" variable
-- will contain chars that require JSON escaping.
curl:set_var("message", "He said \"Hello, world!\"")

-- To demonstrate how the variables are replaced, this example does not execute the curl command.
-- Instead, it generates the raw HTTP request that would be sent if the curl command were run.
local sbRawRequest = chilkat.StringBuilder.new()
local success = curl:to_raw_request(sbCurl:get_as_string(), sbRawRequest)
if not success then
    print(curl.last_error_text)
    return
end

print(sbRawRequest:get_as_string())

-- The output is shown below.
-- Notice that the quote chars around "Hello World!" are properly JSON escaped.

-- POST /messages HTTP/1.1
-- Host: api.example.com
-- Content-Type: application/json
-- Content-Length: 36
--
-- {"text":"He said \"Hello, world!\""}