Sample code for 30+ languages & platforms
PureBasic

curl with Variable Substitution in the Request Body

See more CURL Examples

This example demonstrates using variables located in the request body with the {{variable_name}} syntax.

Chilkat PureBasic Downloads

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

Procedure ChilkatExample()

    success.i = 0

    ; Variables can also be used within the HTTP request body.
    ; Variable names are enclosed between {{ and }}

    ; Here is a curl command with two variables {{name}} and {{age}} located in the data.

    ; curl -X POST https://api.example.com/data \
    ;   -H "Content-Type: application/json" \
    ;   -d '{"name":"{{name}}","age":{{age}}}'

    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/data \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Content-Type: application/json" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -d '{" + Chr(34) + "name" + Chr(34) + ":" + Chr(34) + "{{name}}" + Chr(34) + "," + Chr(34) + "age" + Chr(34) + ":{{age}}}'")

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

    ; Provide values for variables.
    CkHttpCurl::ckSetVar(curl,"name","Alice")
    CkHttpCurl::ckSetVar(curl,"age","30")

    ; 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)

    ; Output:

    ; POST /data HTTP/1.1
    ; Host: api.example.com
    ; Content-Type: application/json
    ; Content-Length: 25
    ; 
    ; {"name":"Alice","age":30}

    ; --------------------------------------------------------------------------------------------------
    ; Note: Variable substitution in the request body can be turned off by 
    ; setting the EnableBodyVars property equal to 0

    CkHttpCurl::setCkEnableBodyVars(curl, 0)

    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 raw request with body variable substitution disable:

    ; Host: api.example.com
    ; Content-Type: application/json
    ; Content-Length: 33
    ; 
    ; {"name":"{{name}}","age":{{age}}}


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


    ProcedureReturn
EndProcedure