![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java JavaScript Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) curl Dependency Engine Multi-Step Execution PlanSee more CURL ExamplesThis example expands on the basic concept by demonstrating a multi-step execution plan, where several Instead of resolving a single missing input with one helper command, the target When the
Once all dependencies are identified, a multi-step execution plan is constructed. Each The execution plan is then carried out step by step, with intermediate results flowing between commands, and the final step being the target Note: This example requires Chilkat v11.5.0 or greater. For more information, see https://www.chilkatsoft.com/curl_dependency_engine.asp
IncludeFile "CkHttpCurl.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() success.i = 0 httpCurl.i = CkHttpCurl::ckCreate() If httpCurl.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The final curl command we want to execute. ; It depends on {{drive_id}}, which is not yet known. targetCurl.s = "curl -X GET https://graph.microsoft.com/v1.0/drives/{{drive_id}}/root/children" ; Define a helper function that can produce drive_id. ; This function lists drives for a given site, which requires {{site_id}}. fnName.s = "getDrives" CkHttpCurl::ckAddFunction(httpCurl,fnName,"curl -X GET https://graph.microsoft.com/v1.0/sites/{{site_id}}/drives") ; Define the output of getDrives. ; The JSON response contains an array named "value". ; We take the first element (value[0]) and extract its "id" as drive_id. jsonPath.s = "value[0].id" CkHttpCurl::ckAddOutput(httpCurl,fnName,jsonPath,"drive_id") ; drive_id depends on site_id, which is also not yet known. ; Define another helper function to obtain site_id. fnName = "getSite" CkHttpCurl::ckAddFunction(httpCurl,fnName,"GET https://graph.microsoft.com/v1.0/sites/root:/sites/{{site_name}}") ; Map the "id" field from the getSite response to the variable site_id. jsonPath = "id" CkHttpCurl::ckAddOutput(httpCurl,fnName,jsonPath,"site_id") ; Provide the initial known input. ; site_name is the starting value that allows the dependency chain to be resolved. CkHttpCurl::ckSetVar(httpCurl,"site_name","test") ; ---------------------------------------------------------------------------------------------------------------------- ; Configure OAuth2 authentication using the client credentials flow. ; Secrets (client_id, client_secret, token_endpoint) are retrieved from the ; local secrets manager because EnableSecrets is enabled. jsonOAuth2.i = CkJsonObject::ckCreate() If jsonOAuth2.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::setCkEnableSecrets(jsonOAuth2, 1) CkJsonObject::ckUpdateString(jsonOAuth2,"oauth2.client_id","!!sharepoint|oauth2|client_id") CkJsonObject::ckUpdateString(jsonOAuth2,"oauth2.client_secret","!!sharepoint|oauth2|client_secret") CkJsonObject::ckUpdateString(jsonOAuth2,"oauth2.scope","https://graph.microsoft.com/.default") CkJsonObject::ckUpdateString(jsonOAuth2,"oauth2.token_endpoint","!!sharepoint|oauth2|token_endpoint") CkHttpCurl::ckSetAuth(httpCurl,jsonOAuth2) ; ---------------------------------------------------------------------------------------------------------------------- ; Execute the target curl command. ; Internally, the system will: ; ; 1) Detect that {{drive_id}} is required but not defined. ; 2) Find that "getDrives" can produce drive_id. ; 3) Detect that getDrives requires {{site_id}}, which is also not defined. ; 4) Find that "getSite" can produce site_id. ; 5) Verify that getSite requires {{site_name}}, which is already known. ; 6) Build a multi-step execution plan: ; - First: run getSite (produces site_id) ; - Second: run getDrives (produces drive_id) ; - Third: run the target curl (uses drive_id) success = CkHttpCurl::ckDoYourThing(httpCurl,targetCurl) If success = 0 Debug CkHttpCurl::ckLastErrorText(httpCurl) CkHttpCurl::ckDispose(httpCurl) CkJsonObject::ckDispose(jsonOAuth2) ProcedureReturn EndIf ; Retrieve and display the HTTP response status code. statusCode.i = CkHttpCurl::ckStatusCode(httpCurl) Debug "response status code: " + Str(statusCode) ; Load and display the JSON response from the final curl command. responseJson.i = CkJsonObject::ckCreate() If responseJson.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::setCkEmitCompact(responseJson, 0) CkHttpCurl::ckGetResponseJson(httpCurl,responseJson) Debug CkJsonObject::ckEmit(responseJson) CkHttpCurl::ckDispose(httpCurl) CkJsonObject::ckDispose(jsonOAuth2) CkJsonObject::ckDispose(responseJson) ProcedureReturn EndProcedure |
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.