Sample code for 30+ languages & platforms
PureBasic 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 PureBasic Downloads

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

Procedure ChilkatExample()

    success.i = 0

    success = 0

    ;  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.
    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/graphql \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Content-Type: application/graphql; charset=utf-8" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Accept: application/json" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -d " + Chr(34) + "mutation {")
    CkStringBuilder::ckAppendLn(sbCurl,"  createUser(")
    CkStringBuilder::ckAppendLn(sbCurl,"    input: {")
    CkStringBuilder::ckAppendLn(sbCurl,"      name: \" + Chr(34) + "{{name}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      city: \" + Chr(34) + "{{city}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      note: \" + Chr(34) + "{{note}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      bio: \" + Chr(34) + "{{bio}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"    }")
    CkStringBuilder::ckAppendLn(sbCurl,"  ) {")
    CkStringBuilder::ckAppendLn(sbCurl,"    id")
    CkStringBuilder::ckAppendLn(sbCurl,"    name")
    CkStringBuilder::ckAppendLn(sbCurl,"  }")
    CkStringBuilder::ckAppendLn(sbCurl,"}" + Chr(34))

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

    ;  Provide values for variables
    CkHttpCurl::ckSetVar(curl,"name","José O'Connor")
    CkHttpCurl::ckSetVar(curl,"city","München")
    CkHttpCurl::ckSetVar(curl,"note","He said " + Chr(34) + "Hello, world!" + Chr(34) + " — and left…")
    CkHttpCurl::ckSetVar(curl,"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.
    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 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
    ;    }
    ;  }


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


    ProcedureReturn
EndProcedure