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

curl with Variable Substitution in a GraphQL Request Body

See more CURL Examples

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

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

local success = false

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

-- curl -X POST https://api.example.com/graphql \
--   -H "Content-Type: application/graphql; charset=utf-8" \
--   -H "Accept: application/json" \
--   --data-binary "mutation {
--   createUser(
--     input: {
--       name: \"{{name}}\"
--       city: \"{{city}}\"
--       note: \"{{note}}\"
--       bio: \"{{bio}}\"
--     }
--   ) {
--     id
--     name
--   }
-- }"

-- Build the above curl command.
local sbCurl = chilkat.StringBuilder.new()
sbCurl:append_ln("curl -X POST https://api.example.com/graphql \\")
sbCurl:append_ln("  -H \"Content-Type: application/graphql; charset=utf-8\" \\")
sbCurl:append_ln("  -H \"Accept: application/json\" \\")
sbCurl:append_ln("  -d \"mutation {")
sbCurl:append_ln("  createUser(")
sbCurl:append_ln("    input: {")
sbCurl:append_ln("      name: \\\"{{name}}\\\"")
sbCurl:append_ln("      city: \\\"{{city}}\\\"")
sbCurl:append_ln("      note: \\\"{{note}}\\\"")
sbCurl:append_ln("      bio: \\\"{{bio}}\\\"")
sbCurl:append_ln("    }")
sbCurl:append_ln("  ) {")
sbCurl:append_ln("    id")
sbCurl:append_ln("    name")
sbCurl:append_ln("  }")
sbCurl:append_ln("}\"")

local curl = chilkat.HttpCurl.new()

-- Provide values for variables
curl:set_var("name", "José O'Connor")
curl:set_var("city", "München")
curl:set_var("note", "He said \"Hello, world!\" — and left…")
curl:set_var("bio", "Loves sushi, café visits, and π ≈ 3.14159")

-- 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()
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 the quote chars around "Hello, world!" are properly escaped.

-- POST /graphql HTTP/1.1
-- Accept: application/json
-- Host: api.example.com
-- Content-Type: application/graphql; charset=utf-8
-- Content-Length: 250
--
-- mutation {
--   createUser(
--     input: {
--       name: "José O'Connor"
--       city: "München"
--       note: "He said \"Hello, world!\" — and left…"
--       bio: "Loves sushi, café visits, and π ≈ 3.14159"
--     }
--   ) {
--     id
--     name
--   }
-- }