Sample code for 30+ languages & platforms
Delphi DLL

curl with OAuth2 Client Credentials

See more CURL Examples

This example shows how to run a simple CURL command with an OAuth2 access token for authorization. We use CURL to retrieve a SharePoint site ID, and Chilkat automatically fetches the OAuth2 access token using the provided credentials.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StringBuilder, HttpCurl, JsonObject;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sb: HCkStringBuilder;
jsonOAuth2: HCkJsonObject;
httpCurl: HCkHttpCurl;
responseJson: HCkJsonObject;
statusCode: Integer;

begin
success := False;

// This example will run the following curl command

// curl -X GET "https://graph.microsoft.com/v1.0/sites/{{sharepoint_hostname}}:/sites/{{site_name}}" \
//   -H "Authorization: Bearer ACCESS_TOKEN" \
//   -H "Accept: application/json"

sb := CkStringBuilder_Create();
CkStringBuilder_AppendLn(sb,'curl -X GET "https://graph.microsoft.com/v1.0/sites/{{sharepoint_hostname}}:/sites/{{site_name}}" \");
CkStringBuilder_AppendLn(sb,'  -H "Authorization: Bearer ACCESS_TOKEN" \");
CkStringBuilder_AppendLn(sb,'  -H "Accept: application/json"');

// Build the JSON that provides information for getting the OAuth2 access token using the OAuth2 client credentials flow.
jsonOAuth2 := CkJsonObject_Create();

CkJsonObject_UpdateString(jsonOAuth2,'oauth2.client_id','CLIENT_ID');
CkJsonObject_UpdateString(jsonOAuth2,'oauth2.client_secret','CLIENT_SECRET');
CkJsonObject_UpdateString(jsonOAuth2,'oauth2.scope','https://graph.microsoft.com/.default');
CkJsonObject_UpdateString(jsonOAuth2,'oauth2.token_endpoint','https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token');

httpCurl := CkHttpCurl_Create();

// Provide the information for getting the OAuth2 access token from the token endpoint
// Note: The Authorization header specified in the curl command will be ignored and replaced using the OAuth2 access token obtained at runtime from the token endpoint.
CkHttpCurl_SetAuth(httpCurl,jsonOAuth2);

// The placeholders {{sharepoint_hostname}} and {{site_name}} represent variables that must be defined before execution.
// When DoYourThing runs the curl command, it automatically substitutes these placeholders with their corresponding values.
// Below are the values assigned to these variables:
CkHttpCurl_SetVar(httpCurl,'sharepoint_hostname','example.sharepoint.com');
CkHttpCurl_SetVar(httpCurl,'site_name','test');

// Run the curl command.
success := CkHttpCurl_DoYourThing(httpCurl,CkStringBuilder__getAsString(sb));
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttpCurl__lastErrorText(httpCurl));
    Exit;
  end;

responseJson := CkJsonObject_Create();
CkJsonObject_putEmitCompact(responseJson,False);

CkHttpCurl_GetResponseJson(httpCurl,responseJson);

statusCode := CkHttpCurl_getStatusCode(httpCurl);
Memo1.Lines.Add('response status code: ' + IntToStr(statusCode));

Memo1.Lines.Add(CkJsonObject__emit(responseJson));

CkStringBuilder_Dispose(sb);
CkJsonObject_Dispose(jsonOAuth2);
CkHttpCurl_Dispose(httpCurl);
CkJsonObject_Dispose(responseJson);

end;