Delphi ActiveX
Delphi ActiveX
Bunny Sign URL and then Download using Signed URL
See more Bunny CDN Examples
Shows how to sign a URL for BunnyCDN Token Authentication and then use it to download.Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
mySecurityKey: WideString;
url: WideString;
urlObj: TChilkatUrl;
url_scheme: WideString;
url_host: WideString;
url_path: WideString;
expTime: TCkDateTime;
expires: WideString;
sbToHash: TChilkatStringBuilder;
token: WideString;
sbSignedUrl: TChilkatStringBuilder;
signedUrl: WideString;
http: TChilkatHttp;
begin
success := 0;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
mySecurityKey := 'e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed';
url := 'https://test.b-cdn.net/sample-pdf-with-images.pdf';
// Extract the URL components.
urlObj := TChilkatUrl.Create(Self);
urlObj.ParseUrl(url);
url_scheme := 'https';
if (urlObj.Ssl = 0) then
begin
url_scheme := 'http';
end;
url_host := urlObj.Host;
url_path := urlObj.Path;
// Calculate an expiration time 1 hour from the current date/time.
expTime := TCkDateTime.Create(Self);
expTime.SetFromCurrentSystemTime();
expTime.AddSeconds(3600);
expires := expTime.GetAsUnixTimeStr(0);
Memo1.Lines.Add('Expires = ' + expires);
// Create the string to hash
sbToHash := TChilkatStringBuilder.Create(Self);
sbToHash.Append(mySecurityKey);
sbToHash.Append(url_path);
sbToHash.Append(expires);
// Base64Url encoding is the same as base64, except "-" is used instead of "+",
// "_" is used instead of "/", and no "=" padding is added.
token := sbToHash.GetHash('sha256','base64Url','utf-8');
sbSignedUrl := TChilkatStringBuilder.Create(Self);
sbSignedUrl.Append(url_scheme);
sbSignedUrl.Append('://');
sbSignedUrl.Append(url_host);
sbSignedUrl.Append(url_path);
sbSignedUrl.Append('?token=');
sbSignedUrl.Append(token);
sbSignedUrl.Append('&expires=');
sbSignedUrl.Append(expires);
signedUrl := sbSignedUrl.GetAsString();
Memo1.Lines.Add('Signed URL: ' + signedUrl);
// Use the signed URL to download the file.
http := TChilkatHttp.Create(Self);
success := http.Download(signedUrl,'c:/aaworkarea/sample.pdf');
if (success = 0) then
begin
Memo1.Lines.Add(http.LastErrorText);
end
else
begin
Memo1.Lines.Add('Success.');
end;
end;