Lua Requires Chilkat v11.5.0+
Lua
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
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!\""}