Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHttpCurl.pb"

Procedure ChilkatExample()

    success.i = 0

    ; 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}}}'

    sbCurl.i = CkStringBuilder::ckCreate()
    If sbCurl.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppendLn(sbCurl,"curl -X POST https://api.example.com/messages \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Content-Type: application/json" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -d '{" + Chr(34) + "text" + Chr(34) + ":" + Chr(34) + "{{message}}" + Chr(34) + "}'")

    curl.i = CkHttpCurl::ckCreate()
    If curl.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; In this example, the value we'll provide for the "message" variable
    ; will contain chars that require JSON escaping.
    CkHttpCurl::ckSetVar(curl,"message","He said " + Chr(34) + "Hello, world!" + Chr(34))

    ; 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.
    sbRawRequest.i = CkStringBuilder::ckCreate()
    If sbRawRequest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttpCurl::ckToRawRequest(curl,CkStringBuilder::ckGetAsString(sbCurl),sbRawRequest)
    If success = 0
        Debug CkHttpCurl::ckLastErrorText(curl)
        CkStringBuilder::ckDispose(sbCurl)
        CkHttpCurl::ckDispose(curl)
        CkStringBuilder::ckDispose(sbRawRequest)
        ProcedureReturn
    EndIf

    Debug CkStringBuilder::ckGetAsString(sbRawRequest)

    ; 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!\""}


    CkStringBuilder::ckDispose(sbCurl)
    CkHttpCurl::ckDispose(curl)
    CkStringBuilder::ckDispose(sbRawRequest)


    ProcedureReturn
EndProcedure