Sample code for 30+ languages & platforms
DataFlex

curl Dependency Engine Simple Example

See more CURL Examples

This example demonstrates a simple way to define curl commands with declared inputs and outputs, and then execute a target command by automatically resolving its dependencies.

When the DoYourThing method is called with the target curl command, the following occurs:

  • Scans the curl command for required inputs using the {{variable}} syntax
  • Determines which of those inputs already have values
  • For any missing inputs:
    • Locates another curl command that can produce the needed value
    • Recursively resolves that command’s own inputs in the same way
  • Constructs an execution plan so that each curl command runs only after all of its required inputs are available

The execution plan is then carried out, with the final step being the target curl command originally passed to DoYourThing.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttpCurl
    String sTargetCurl
    String sFnName
    String sJsonPath
    Variant vJsonOAuth2
    Handle hoJsonOAuth2
    Integer iStatusCode
    Variant vResponseJson
    Handle hoResponseJson
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatHttpCurl)) To hoHttpCurl
    If (Not(IsComObjectCreated(hoHttpCurl))) Begin
        Send CreateComObject of hoHttpCurl
    End

    // The target curl command we ultimately want to execute.
    // It requires a {{site_id}} value, which is not yet known.
    Move "GET https://graph.microsoft.com/v1.0/sites/{{site_id}}/drives" To sTargetCurl

    // Because site_id is unknown, we define a helper function (curl command)
    // that can retrieve it.
    Move "getSite" To sFnName
    Get ComAddFunction Of hoHttpCurl sFnName "GET https://graph.microsoft.com/v1.0/sites/root:/sites/{{site_name}}" To iSuccess

    // Define the outputs produced by the helper function.
    // Outputs are extracted from the JSON response using JSON paths.
    // Here, the "id" field from the response is mapped to the variable "site_id".
    Move "id" To sJsonPath
    Get ComAddOutput Of hoHttpCurl sFnName sJsonPath "site_id" To iSuccess

    // Provide a value for site_name, which is required by the getSite function.
    Send ComSetVar To hoHttpCurl "site_name" "test"

    // ----------------------------------------------------------------------------------------------------------------------
    // Build the OAuth2 configuration used for authentication.
    // This uses the client credentials flow, with secrets retrieved
    // from the local secrets manager (because EnableSecrets = true).
    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonOAuth2
    If (Not(IsComObjectCreated(hoJsonOAuth2))) Begin
        Send CreateComObject of hoJsonOAuth2
    End
    Set ComEnableSecrets Of hoJsonOAuth2 To True
    Get ComUpdateString Of hoJsonOAuth2 "oauth2.client_id" "!!sharepoint|oauth2|client_id" To iSuccess
    Get ComUpdateString Of hoJsonOAuth2 "oauth2.client_secret" "!!sharepoint|oauth2|client_secret" To iSuccess
    Get ComUpdateString Of hoJsonOAuth2 "oauth2.scope" "https://graph.microsoft.com/.default" To iSuccess
    Get ComUpdateString Of hoJsonOAuth2 "oauth2.token_endpoint" "!!sharepoint|oauth2|token_endpoint" To iSuccess
    // ----------------------------------------------------------------------------------------------------------------------

    Get pvComObject of hoJsonOAuth2 to vJsonOAuth2
    Get ComSetAuth Of hoHttpCurl vJsonOAuth2 To iSuccess

    // Execute the target curl command.
    // Internally, the system will:
    // 1) Detect that {{site_id}} is required but not yet defined.
    // 2) Find that the "getSite" function can produce site_id.
    // 3) Verify that getSite's input (site_name) is already available.
    // 4) Build an execution plan: first run getSite, then run the target curl.
    Get ComDoYourThing Of hoHttpCurl sTargetCurl To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttpCurl To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Retrieve and display the HTTP response status code.
    Get ComStatusCode Of hoHttpCurl To iStatusCode
    Showln "response status code: " iStatusCode

    // Load and display the JSON response from the final curl command.
    Get Create (RefClass(cComChilkatJsonObject)) To hoResponseJson
    If (Not(IsComObjectCreated(hoResponseJson))) Begin
        Send CreateComObject of hoResponseJson
    End
    Set ComEmitCompact Of hoResponseJson To False
    Get pvComObject of hoResponseJson to vResponseJson
    Get ComGetResponseJson Of hoHttpCurl vResponseJson To iSuccess
    Get ComEmit Of hoResponseJson To sTemp1
    Showln sTemp1


End_Procedure